Réponses:
Enumerable.Range(0, 11);
Génère une séquence de nombres entiers dans une plage spécifiée.
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx
Vous pouvez créer une fonction simple. Cela fonctionnerait pour une séquence plus compliquée. Sinon, ça Enumerable.Range
devrait faire l'affaire.
IEnumerable<int> Sequence(int n1, int n2)
{
while (n1 <= n2)
{
yield return n1++;
}
}
OddSequence
EvenSequence
ou d'autres gammes personnalisées. if (++n1 % 2 == 0) yield return n1
, par exemple. Cela fait quelques jours;)
Projection Linq avec la surcharge d'indexeur rarement utilisée (i) :
(new int[11]).Select((o,i) => i)
Je préfère cette méthode pour sa flexibilité.
Par exemple, si je veux des évens:
(new int[11]).Select((item,i) => i*2)
Ou si je veux des incréments de 5 minutes d'une heure:
(new int[12]).Select((item,i) => i*5)
Ou des chaînes:
(new int[12]).Select((item,i) => "Minute:" + i*5)
En C # 8.0, vous pouvez utiliser des indices et des plages
Par exemple:
var seq = 0..2;
var array = new string[]
{
"First",
"Second",
"Third",
};
foreach(var s in array[seq])
{
System.Console.WriteLine(s);
}
// Output: First, Second
Ou si vous voulez créer, IEnumerable<int>
vous pouvez utiliser l'extension:
public static IEnumerable<int> ToEnumerable(this Range range)
{
for (var i = range.Start.Value; i < range.End.Value; i++)
{
yield return i;
}
}
...
var seq = 0..2;
foreach (var s in seq.ToEnumerable())
{
System.Console.WriteLine(s);
}
// Output: 0, 1
PS Mais soyez prudent avec les «index de fin» . Par exemple, la méthode d'extension ToEnumerable ne fonctionne pas avec var seq = ^2..^0
.
A l'origine répondu ici .
Si vous souhaitez énumérer une séquence de nombres ( IEnumerable<int>
) de 0
à une variable end
, essayez
Enumerable.Range(0, ++10);
En guise d'explication, pour obtenir une séquence de nombres de 0 à 10, vous voulez que la séquence commence à 0 (en vous rappelant qu'il y a 11 nombres entre 0 et 10 inclus).
Si vous voulez une série linéaire illimitée, vous pouvez écrire une fonction comme
IEnumerable<int> Series(int k = 0, int n = 1, int c = 1)
{
while (true)
{
yield return k;
k = (c * k) + n;
}
}
que vous pourriez utiliser comme
var ZeroTo1000 = Series().Take(11);
Si vous voulez une fonction que vous pouvez appeler à plusieurs reprises pour générer des nombres incrémentiels, peut-être voulez-vous quelque chose comme.
using System.Threading;
private static int orderNumber = 0;
int Seq()
{
return Interlocked.Increment(ref orderNumber);
}
Lorsque vous appelez, Seq()
il renverra le numéro de commande suivant et incrémentera le compteur.
J'ai ces fonctions dans mon code
private static IEnumerable<int> FromZero(this int count)
{
if (count <= 0)
yield break;
for (var i = 0; i < count; i++)
{
yield return i;
}
}
private static IEnumerable<int> FromOne(this int count)
{
if (count <= 0)
yield break;
for (var i = 1; i <= count; i++)
{
yield return i;
}
}
Cela aide à réduire certains pour (i) code.
IEnumerable<int>
, incluez un appel.ToArray()
.