F # a séquences qui permet de créer des séquences:
seq { 0 .. 10 }
Créez une séquence de nombres de 0 à 10.
Y a-t-il quelque chose de similaire en C #?
Vous pouvez utiliser Enumerable.Range(0, 10);
. Exemple:
var seq = Enumerable.Range(0, 10);
Page MSDN ici .
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, le Enumerable.Range
devrait faire l'affaire.
IEnumerable<int> Sequence(int n1, int n2)
{
while (n1 <= n2)
{
yield return n1++;
}
}
Projection Linq avec la surcharge rarement utilisée indexer (i) :
(new int[11]).Select((o,i) => i)
Je préfère cette méthode pour sa flexibilité.
Par exemple, si je veux un peu:
(new int[11]).Select((item,i) => i*2)
Ou si je veux des incréments d’heure de 5 minutes:
(new int[12]).Select((item,i) => i*5)
Ou des cordes:
(new int[12]).Select((item,i) => "Minute:" + i*5)
Ma mise en oeuvre:
private static IEnumerable<int> Sequence(int start, int end)
{
switch (Math.Sign(end - start))
{
case -1:
while (start >= end)
{
yield return start--;
}
break;
case 1:
while (start <= end)
{
yield return start++;
}
break;
default:
yield break;
}
}
Si vous souhaitez énumérer une séquence de nombres (IEnumerable<int>
) de 0
à une variable end
, essayez alors
Enumerable.Range(0, ++end);
En explication, pour obtenir une séquence de nombres de 0 à 1000, vous voulez que la séquence commence à 0 (en gardant à l'esprit qu'il existe 1001 nombres compris entre 0 et 1000, 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(1001);
Si vous voulez une fonction que vous pouvez appeler plusieurs fois pour générer des numéros incrémentiels, vous voulez peut-être quelque chose comme.
using System.Threading;
private static int orderNumber = 0;
int Seq()
{
return Interlocked.Increment(ref orderNumber);
}
Lorsque vous appelez Seq()
, le numéro de commande suivant sera renvoyé et le compteur sera incrémenté.