Effektive Möglichkeit, eindeutige Zufallswerte in C# zu generieren
Das Generieren eindeutiger Zufallszahlen ist in vielen Programmierszenarien eine häufige Anforderung. Die Verwendung der Standardklasse System.Random
garantiert jedoch keine Eindeutigkeit, insbesondere wenn der Bereich klein ist.
Einschränkungen von Random.Next()
Die MethodeRandom.Next()
ist nicht darauf ausgelegt, eindeutige Werte innerhalb eines bestimmten Bereichs zu generieren. Es generiert eine zufällige Ganzzahl innerhalb des angegebenen Bereichs und kann doppelte Zahlen erzeugen, insbesondere wenn der Bereich klein ist.
Saatwert verwenden
Die Verwendung eines Startwerts wie DateTime.Now.Ticks.GetHashCode()
ist eine gängige Methode zur Verbesserung der Random
-ähnlichen Zufälligkeit. Allerdings wird dadurch die Möglichkeit der Generierung doppelter Nummern immer noch nicht ausgeschlossen.
Bessere Lösung
Anstatt sich auf Random.Next()
zu verlassen, sollten Sie die folgende Methode zum Generieren eindeutiger Zufallszahlen in Betracht ziehen:
<code class="language-csharp">public class RandomGenerator { private readonly Random _random; private HashSet<int> _uniqueValues; public RandomGenerator() { _random = new Random(); _uniqueValues = new HashSet<int>(); } public int GetUniqueNumber(int min, int max) { int randomNumber; do { randomNumber = _random.Next(min, max); } while (_uniqueValues.Contains(randomNumber)); _uniqueValues.Add(randomNumber); return randomNumber; } }</code>
Diese Methode verwendet HashSet
, um den generierten Wert zu speichern. Die Methode GetUniqueNumber
generiert wiederholt Zufallszahlen, bis ein eindeutiger Wert innerhalb des angegebenen Bereichs gefunden wird. Dies stellt die Einzigartigkeit sicher, während die Klasse Random
weiterhin verwendet wird.
Das obige ist der detaillierte Inhalt vonWie generiert man in C# wirklich eindeutige Zufallszahlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!