Effizientes Abrufen einer zufälligen Teilsammlung mit Shuffle
Die Herausforderung, eine zufällige Teilmenge einer Sammlung abzurufen, tritt beim Programmieren häufig auf. LINQ bietet vielseitige Mechanismen zur Manipulation von Datensammlungen, und Entwickler suchen häufig nach optimierten Ansätzen zum Erhalten randomisierter Teilmengen.
Vorgeschlagene Lösung: Implementierung von Fisher-Yates-Durstenfeld Shuffle
Ein Optimum Die Methode, dies zu erreichen, ist der Fisher-Yates-Durstenfeld-Shuffle. Bei dieser Technik wird iterativ ein zufälliges Element aus der Quellsammlung ausgewählt und mit dem letzten unsortierten Element ausgetauscht, um sicherzustellen, dass jedes Element die gleiche Chance hat, ausgewählt zu werden.
Implementierung über die Erweiterungsmethode
Um die Funktionalität von LINQ zu verbessern, wurde eine Erweiterungsmethode namens Shuffle entwickelt, die den Fisher-Yates-Durstenfeld-Shuffle beinhaltet. Diese Methode akzeptiert eine IEnumerable-Eingabe und gibt eine gemischte Sequenz zurück. Darüber hinaus unterstützt es die Übergabe einer Zufallsinstanz zur Anpassung.
Die Implementierung umfasst die Konvertierung der Quellsammlung in eine Liste, um einen zeitkonstanten Zufallszugriff sicherzustellen. Elemente werden dann nacheinander ausgetauscht, um eine zufällige Permutation zu erstellen.
Beispielverwendung
So verwenden Sie die Shuffle-Erweiterungsmethode:
Codebeispiel
Das bereitgestellte Code-Snippet zeigt, wie Sie die Shuffle-Erweiterung verwenden, um eine gemischte Untersammlung der angegebenen zu erhalten Größe:
// take n random items from yourCollection var randomItems = yourCollection.Shuffle().Take(n);
Das obige ist der detaillierte Inhalt vonWie kann ich mit LINQ effizient eine zufällige Teilmenge einer Sammlung abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!