Frage

Ich habe einen Artikel über MSDN Magazine Lesen der ein zufälliges Array zu erzeugen. Der Artikel basiert VB.NET und ich bin nicht sicher, was sofort das Äquivalent in C # ist:

Dim rnd As New System.Random()
Dim numbers = Enumerable.Range(1, 100). _
    OrderBy(Function() rnd.Next)
War es hilfreich?

Lösung

Die Entwickler Fusion VB.Net zu C # Konverter sagt, dass der äquivalent C # -Code ist:

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

Für die Zukunft, sie haben auch eine C # VB.Net Rechner . Es gibt mehrere andere Werkzeuge für diese auch.

Andere Tipps

Ich dachte zunächst, wäre dies eine schlechte Idee, da der Sortieralgorithmus mehr Vergleiche für die Zahlen tun muß, und es wird einen anderen Sortierschlüssel für die gleiche Anzahl jedes Mal ruft das Lambda für diese Nummer bekommen. Allerdings sieht es aus wie es nur einmal für jedes Element ruft in der Liste und speichert, die für die spätere Verwendung zu schätzen wissen. Dieser Code zeigt dies:

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());

Was ist mit etwas viel leichter ...

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

Best I ohne Zugriff auf Visual Studio (Kreuz Finger) aus der Spitze von meinem Kopf tun:

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

Mit der C5 Allgemein Sammlung Bibliothek , könnten Sie einfach die eingebaute Shuffle() Methode verwenden:

IList<int> numbers = new ArrayList<int>(Enumerable.Range(1,100));
numbers.Shuffle();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top