簡介
從數組中隨機選擇一個項目而不重複是一種常見的程式設計任務。然而,如果專案池不斷被修改,確保效率就變得至關重要。
問題
開發者實現了一個從數組中隨機選擇項目的功能同時保留最近選擇的列表以避免重複。然而,他們對其效率表示擔憂,並詢問是否有更優化的方法。
回答
1。遞歸澄清
提供的程式碼確實看起來像是遞歸函數。遞歸涉及函數呼叫自身,這在某些場景下可能會導致效率低下。
2.效率提升
要提高效率,請考慮以下替代方法:
代碼實現:
<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>
說明:
這種方法將隨機選擇邏輯與負責管理最近選擇陣列的程式碼隔離。因此,效率得到了提高,因為每次運行選擇器函數時,隨機選擇只發生一次。
透過在副本耗盡時重置副本,該函數保證所有項目都有相同的機會被選擇。這消除了程式碼陷入無限循環試圖找到“唯一”名稱的潛在問題。
以上是如何有效地從數組中選擇隨機項而不重複,特別是當數組不斷修改時?的詳細內容。更多資訊請關注PHP中文網其他相關文章!