Einführung
Die zufällige Auswahl eines Elements aus einem Array ohne Wiederholung ist eine gängige Programmierung Aufgabe. Wenn sich der Artikelpool jedoch ständig ändert, ist die Sicherstellung der Effizienz von entscheidender Bedeutung.
Frage
Ein Entwickler hat eine Funktion implementiert, um ein Element zufällig aus einem Array auszuwählen Dabei wird eine Liste der zuletzt getroffenen Entscheidungen geführt, um Wiederholungen zu vermeiden. Sie äußern jedoch Bedenken hinsichtlich der Effizienz und erkundigen sich, ob es einen optimaleren Ansatz gibt.
Antwort
1. Erläuterung der Rekursion
Der bereitgestellte Code scheint tatsächlich eine rekursive Funktion zu sein. Bei der Rekursion ruft sich eine Funktion selbst auf, was in bestimmten Szenarien zu Ineffizienzen führen kann.
2. Effizienzverbesserung
Um die Effizienz zu verbessern, ziehen Sie den folgenden alternativen Ansatz in Betracht:
Code-Implementierung:
<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']);</code>
Erklärung:
Dieser Ansatz Isoliert die Zufallsauswahllogik vom Code, der für die Verwaltung des Arrays der letzten Auswahlmöglichkeiten verantwortlich ist. Dadurch wird die Effizienz verbessert, da die zufällige Auswahl nur einmal pro Ausführung der Auswahlfunktion erfolgt.
Durch das Zurücksetzen der Kopie, wenn sie aufgebraucht ist, garantiert die Funktion, dass alle Elemente die gleiche Chance haben, ausgewählt zu werden. Dadurch wird das potenzielle Problem beseitigt, dass der Code in einer Endlosschleife stecken bleibt und versucht, einen „eindeutigen“ Namen zu finden.
Das obige ist der detaillierte Inhalt vonWie kann ich effizient und ohne Wiederholung zufällige Elemente aus einem Array auswählen, insbesondere wenn das Array ständig geändert wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!