Remarque: Cela crée une séquence commençant à 0 avec 10 éléments (se terminant à 9). Si vous voulez de 0 à 10, le deuxième paramètre serait 11. Et si vous avez besoin d'un tableau réel et non IEnumerable<int>, incluez un appel .ToArray().
Anthony Pegram
39
Enumerable.Range(0,11);
Génère une séquence de nombres entiers dans une plage spécifiée.
Par "plus compliqué", voulez-vous dire simplement "où vous avez le début et la fin à portée de main au lieu du nombre d'éléments"? Sinon, je manque votre sens. 🤔
ruffin le
1
Je crois que j'envisageais OddSequenceEvenSequenceou d'autres gammes personnalisées. if (++n1 % 2 == 0) yield return n1, par exemple. Cela fait quelques jours;)
Josiah Ruddell
Ha, ouais, un ou deux jours je suppose. Ou quelques milliers. ; ^)
var seq =0..2;var array =newstring[]{"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:
publicstaticIEnumerable<int>ToEnumerable(thisRange range){for(var i = range.Start.Value; i < range.End.Value; i++){yieldreturn 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.
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){yieldreturn k;
k =(c * k)+ n;}}
que vous pourriez utiliser comme
varZeroTo1000=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.
privatestaticIEnumerable<int>FromZero(thisint count){if(count <=0)yieldbreak;for(var i =0; i < count; i++){yieldreturn i;}}privatestaticIEnumerable<int>FromOne(thisint count){if(count <=0)yieldbreak;for(var i =1; i <= count; i++){yieldreturn i;}}
IEnumerable<int>
, incluez un appel.ToArray()
.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
la source
Vous pouvez créer une fonction simple. Cela fonctionnerait pour une séquence plus compliquée. Sinon, ça
Enumerable.Range
devrait faire l'affaire.la source
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) :
Je préfère cette méthode pour sa flexibilité.
Par exemple, si je veux des évens:
Ou si je veux des incréments de 5 minutes d'une heure:
Ou des chaînes:
la source
En C # 8.0, vous pouvez utiliser des indices et des plages
Par exemple:
Ou si vous voulez créer,
IEnumerable<int>
vous pouvez utiliser l'extension: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
.la source
Ma mise en œuvre:
la source
A l'origine répondu ici .
Si vous souhaitez énumérer une séquence de nombres (
IEnumerable<int>
) de0
à une variableend
, essayezEn 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
que vous pourriez utiliser comme
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.
Lorsque vous appelez,
Seq()
il renverra le numéro de commande suivant et incrémentera le compteur.la source
J'ai ces fonctions dans mon code
Cela aide à réduire certains pour (i) code.
la source