Heim > Artikel > Web-Frontend > Wie können wir zufällige Array-Elemente ohne Wiederholung effizient auswählen?
Effiziente zufällige Auswahl von Array-Elementen ohne Wiederholung
In diesem Artikel untersuchen wir ein Problem, mit dem Benutzer konfrontiert sind, die nach einer effizienten Methode zur zufälligen Auswahl suchen Elemente aus einem Array ohne Wiederholung. Der bereitgestellte Code wählt effektiv Elemente aus, führt jedoch aufgrund der Verwendung einer rekursiven Funktion die Möglichkeit einer Endlosschleife ein.
Rekursive Funktion?
Die Funktion ChooseName() kann als rekursiv betrachtet werden, da es sich innerhalb seiner Definition auf sich selbst bezieht. Die Beendigungsbedingung ist die Entdeckung eines eindeutigen Elements, bei dem „unique“ auf „false“ gesetzt ist, wodurch die Schleife unterbrochen und der Funktionsaufruf erneut gestartet wird.
Verbesserung der Effizienz
Zur Verbesserung Effizienz betrachten wir einen alternativen Ansatz, der vom Kommentator @YuriyGalanter vorgeschlagen wurde. Anstatt uns auf eine rekursive Funktion zu verlassen, können wir Elemente zufällig aus dem Array auswählen und sie in einem temporären Array speichern. Sobald alle Elemente ausgewählt sind, setzen wir das temporäre Array zurück und fahren mit dem zufälligen Auswahlprozess fort.
Implementierung
Die folgende Implementierung beinhaltet diesen Ansatz:
<code class="javascript">function randomNoRepeats(array) { var copy = array.slice(0); return function() { if (copy.length < 1) { copy = array.slice(0); } var index = Math.floor(Math.random() * copy.length); var item = copy[index]; copy.splice(index, 1); return item; }; } var chooser = randomNoRepeats(['Foo', 'Bar', 'Gah']); chooser(); // => "Bar" chooser(); // => "Foo" chooser(); // => "Gah" chooser(); // => "Foo" -- only repeats once all items are exhausted.</code>
Durch die Verwendung dieser Funktion können Elemente nach dem Zufallsprinzip ausgewählt werden, ohne dass die Möglichkeit einer Endlosschleife besteht, und gleichzeitig werden Wiederholungsprobleme vermieden.
Das obige ist der detaillierte Inhalt vonWie können wir zufällige Array-Elemente ohne Wiederholung effizient auswählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!