2009-07-28 7 views
4

Je suis à la recherche d'un moyen ultra-facile de générer une liste de nombres, 1-200. (il peut être une liste, tableau, énumérable ... Je ne me soucie pas vraiment du type spécifique)Génération de séquence simple?

Apparemment. Net 4.0 a une méthode Sequence.Range(min,max). Mais je suis actuellement sur .Net 3.5.

Voici un exemple d'utilisation, de ce que je suis après, montré avec Sequence.Range.

public void ShowOutput(Sequence.Range(1,200)); 

Pour le moment, j'ai besoin des nombres corrélés 1-200. Dans les itérations à venir, je pourrais avoir besoin de listes de nombres arbitraires, donc j'essaie de garder la conception flexible.

Peut-être qu'il existe une bonne solution LINQ? D'autres idées?

Répondre

13

.NET 3,5 a également Range. Il s'agit en réalité Enumerable.Range et renvoie IEnumerable<int>.

La page que vous avez liée à est très obsolète - il parle de 3 en tant que "future version" et la classe statique Enumerable a été appelée Sequence à un moment avant la publication.

Si vous voulez mettre en œuvre vous-même en C# 2 ou version ultérieure, il est facile - voici une:

IEnumerable<int> Range(int count) 
{ 
    for (int n = 0; n < count; n++) 
     yield return n; 
} 

Vous pouvez facilement écrire d'autres méthodes que d'autres listes de filtres:

IEnumerable<int> Double(IEnumerable<int> source) 
{ 
    foreach (int n in source) 
     yield return n * 2; 
} 

Mais comme vous avez 3.5, vous pouvez utiliser les méthodes d'extension dans System.Linq.Enumerable pour ce faire:

var evens = Enumerable.Range(0, someLimit).Select(n => n * 2); 
+0

Vous êtes en effet correct. Je n'ai pas assez lu. Merci de m'avoir corrigé. – abelenky

+0

En fait, votre implémentation n'est pas correcte. 'Enumerable.Range()' est dans la forme 'Range (int start, int count)', votre second paramètre devrait donc être '' count' 'et votre condition d'arrêt devrait être 'n

+0

C'est vrai. J'ai changé l'exemple pour qu'il soit légèrement différent de toute façon (toujours à partir de zéro), car vous pourriez alors utiliser 'Select' pour ajouter un offset à chaque item - un exemple d'orthogonalité. –

6
var r = Enumerable.Range(1, 200); 
3

Découvrez System.Linq.Enumerable.Range.

En ce qui concerne la deuxième partie de votre question, que voulez-vous dire par «listes arbitraires»? Si vous pouvez définir une fonction d'un int aux nouvelles valeurs, vous pouvez utiliser le résultat de gamme avec d'autres méthodes LINQ:

var squares = from i in Enumerable.Range(1, 200) 
       select i * i;