2009-05-12 6 views
4

Je cherche le (s) moyen (s) de remplir un tableau avec des nombres de 0 à un aléatoire. Par exemple, de 0 à 12 ou 1999, etc.Ways in .NET pour obtenir un tableau de int de 0 à n

Bien sûr, il y a un for -loop:

var arr = int[n]; 
for(int i = 0; i < n; i++) 
{ 
    arr[i] = i; 
} 

Et je peux faire cette méthode été une extension pour Array classe. Mais y a-t-il des moyens plus intéressants?

+1

Vous pourriez faire une sorte d'implémentation fonctionnelle. Vous pouvez remplir une liste et utiliser ToArray. En fin de compte, je ne pense pas qu'il y ait de solutions intéressantes car le problème n'est pas vraiment intéressant. – BobbyShaftoe

+0

Que voulez-vous faire avec la baie? J'aime la solution du configurateur ... – n8wrl

+0

En fait, ma solution vous donne le même résultat que Enumerable.Range (0, n) - J'ai oublié cette méthode pendant un moment. – configurator

Répondre

29

Cela existe déjà (retourne IEnumerable, mais qui est assez facile de changer si vous avez besoin):

arr = Enumerable.Range(0, n); 
+2

Vous devez ajouter un .ToArray() –

6

La façon la plus intéressante dans mon esprit produit pas un tableau, mais un IEnumerable<int> qui énumère le même numéro - il a l'avantage de O (1) le temps d'installation, car il reporte l'exécution de la boucle réelle:

public IEnumerable<int> GetNumbers(int max) { 
    for (int i = 0; i < max; i++) 
     yield return i; 
} 

Cette boucle passe tous les numéros de 0 à max-1, en les renvoyant un à la fois, mais elle ne traverse la boucle que lorsque vous en avez réellement besoin.

Vous pouvez également utiliser ceci comme GetNumbers(max).ToArray() pour obtenir un tableau 'normal'.

1

La meilleure réponse dépend de la raison pour laquelle vous avez besoin du tableau. Le fait est que la valeur de n'importe quel élément de tableau est égale à l'index, donc accéder à n'importe quel élément est essentiellement une opération redondante. Pourquoi ne pas utiliser une classe avec un indexeur, qui retourne juste la valeur de l'index? Il serait indiscernable d'un tableau réel et serait mis à l'échelle à n'importe quelle taille, sauf qu'il ne faudrait pas de mémoire et pas de temps à mettre en place. Mais j'ai l'impression que ce n'est pas la vitesse et la compacité que vous recherchez. Peut-être que si vous développez le problème, une meilleure solution sera plus évidente.

Questions connexes