Question

Je lisais un article dans MSDN Magazine sur l'utilisation de la classe énumérable dans LINQ pour générer un tableau aléatoire. L'article utilise VB.NET et je ne suis pas sûr de savoir quel est l'équivalent en C #:

Dim rnd As New System.Random()
Dim numbers = Enumerable.Range(1, 100). _
    OrderBy(Function() rnd.Next)
Était-ce utile?

La solution

Le convertisseur Fusion VB.Net en C # de Developer Fusion indique que le code C # équivalent est:

System.Random rnd = new System.Random();
IEnumerable<int> numbers = Enumerable.Range(1, 100).OrderBy(r => rnd.Next());

Pour référence ultérieure, ils disposent également d'un convertisseur de C # à VB.Net . Il existe plusieurs autres outils disponibles à cet effet.

Autres conseils

Au départ, j’ai pensé que ce serait une mauvaise idée car l’algorithme de tri devra faire plusieurs comparaisons pour les nombres et obtiendra une clé de tri différente pour le même numéro chaque fois qu’il appellera le lambda. Cependant, il semble qu'il n'appelle qu'une seule fois pour chaque élément de la liste et stocke cette valeur pour une utilisation ultérieure. Ce code montre ceci:

int timesCalled = 0;
Random rnd = new Random();

List<int> numbers = Enumerable.Range(1, 100).OrderBy(r =>
   {
       timesCalled++;
       return rnd.Next();
   }
).ToList();

Assert.AreEqual(timesCalled, 100);
Random rnd = new Random();
IEnumerable<int> numbers = Enumerable.Range(1, 100).OrderBy(r => rnd.Next());

Qu'en est-il de quelque chose de beaucoup plus facile ...

Enumerable.Range(1, 100).OrderBy(c=> Guid.NewGuid().ToString())

Ce que je peux faire de mieux sans avoir accès à Visual Studio (croise les doigts):

System.Random rnd = New System.Random();
IEnumerable<int> numbers = Enumerable.Range(1, 100).OrderBy(rnd => rnd.Next);

À l'aide de la bibliothèque de collections génériques C5 , vous pouvez simplement utiliser le mélangé intégré. Méthode () :

IList<int> numbers = new ArrayList<int>(Enumerable.Range(1,100));
numbers.Shuffle();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top