Heim >Backend-Entwicklung >C++ >Was ist der optimale LINQ-Ansatz zum Erhalten einer zufälligen Teilmenge?
In der Welt der Programmierung ist es oft notwendig, eine zufällige Teilmenge aus einer bestimmten Sammlung zu extrahieren. Als LINQ-Enthusiasten fragen Sie sich vielleicht, wie Sie dies am besten erreichen können.
Ein Ansatz besteht darin, die Erweiterungsmethode .Shuffle() zu verwenden, die den Fisher-Yates-Durstenfeld-Shuffle durchführt. Diese Methode randomisiert effektiv die Reihenfolge der Elemente in einer Sammlung und ist somit eine ideale Lösung zum Erstellen einer zufälligen Untersammlung.
Um die Verwendung zu veranschaulichen, nehmen wir an, Sie haben eine Sammlung namens yourCollection mit N Elementen und möchten dies tun Extrahieren Sie n zufällige Elemente, wobei n <= N. So können Sie dies mit der .Shuffle()-Methode implementieren:
var randomItems = yourCollection.Shuffle().Take(n);
Dieser Code mischt zunächst die Elemente hinein yourCollection mithilfe der .Shuffle()-Methode. Anschließend verwendet es die Methode .Take(), um die ersten n Elemente aus der gemischten Sammlung zu extrahieren. Das Ergebnis ist eine zufällige Untersammlung der Anzahl n.
Hier ist ein Beispiel für die Implementierung der .Shuffle()-Erweiterungsmethode selbst:
public static class EnumerableExtensions { public static IEnumerableShuffle (this IEnumerable source) { return source.Shuffle(new Random()); } public static IEnumerable Shuffle ( this IEnumerable source, Random rng) { if (source == null) throw new ArgumentNullException(nameof(source)); if (rng == null) throw new ArgumentNullException(nameof(rng)); return source.ShuffleIterator(rng); } private static IEnumerable ShuffleIterator ( this IEnumerable source, Random rng) { var buffer = source.ToList(); for (int i = 0; i < buffer.Count; i++) { int j = rng.Next(i, buffer.Count); yield return buffer[j]; buffer[j] = buffer[i]; } } } Durch die Verwendung dieser Erweiterungsmethode können Sie dies ganz einfach tun Mischen und extrahieren Sie eine zufällige Untersammlung beliebiger Größe aus einer LINQ-Abfrage. Diese Technik bietet eine bequeme und effiziente Lösung für eine häufige Datenmanipulationsaufgabe.
Das obige ist der detaillierte Inhalt vonWas ist der optimale LINQ-Ansatz zum Erhalten einer zufälligen Teilmenge?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!