2010-11-19 22 views
0

bekommen Ich möchte zwischen 1-100 20 Zufallszahlen bekommen, aber die Zahl sollte nicht wiederholt ....Wie Random Number

Aktualisiert: Wenn ich 20 Namen haben, in denen jede 5 zu sein zufällig ausgewählt einzeln, aber der Name kam einmal nicht wieder aufgerufen werden .....

+7

Das ist nicht zufällig. Zufallssequenzen _do_ haben wiederholte Nummern. Könntest Du das erläutern? – Oded

+2

Es ist nicht zufällig, aber es ist immer noch nützlich für einige Dinge (z. B. das zufällige Abspielen der Lieder auf einem Album ohne Wiederholungen). – dicroce

+1

Sie möchten ein zufälliges Shuffle, google fisher-yates. –

Antwort

7

Setzen Sie die Zahlen in einer Liste, und aus der Liste auswählen:

List<int> numbers = Enumerable.Range(1, 100).ToList(); 

Random rnd = new Random(); 
List<int> picks = Enumerable.Range(1, 20).Select(n => { 
    int index = rnd.Next(numbers.Count); 
    int pick = numbers[index]; 
    numbers.RemoveAt(index); 
    return pick; 
}); 

Dies ist wahrscheinlich der einfachste Weg, es zu lösen, aber es ist nicht die effizienteste. Das Entfernen von Elementen in einer Liste umfasst das Verschieben der folgenden Elemente. Mit etwas mehr Code könnte man diese Bewegung vermeiden, aber für die meisten Zwecke ist der Code so gut wie er ist.