高效隨機選擇數組項目而不重複
在本文中,我們探討了用戶尋求有效隨機選擇方法時面臨的問題數組中不重複的項目。提供的程式碼有效地選擇了項目,但由於使用遞歸函數而引入了無限循環的可能性。
遞歸函數?
函數 ChooseName() 可以被視為遞歸,因為它在定義中引用了自身。終止條件是發現唯一項,其中unique設定為false,打破循環,重新開始函數呼叫。
提高效率
增強效率,我們考慮評論者@YuriyGalanter 建議的替代方法。我們可以從陣列中隨機選擇項目並將它們儲存在臨時數組中,而不是依賴遞歸函數。選擇所有項目後,我們重置臨時數組並繼續隨機選擇過程。
實現
下面的實現採用了這種方法:
<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>
透過利用此功能,可以隨機選擇項目,而不會出現無限循環,同時避免重複問題。
以上是如何有效率地選擇不重複的隨機數組項目?的詳細內容。更多資訊請關注PHP中文網其他相關文章!