如何有效率地隨機選擇陣列項目而不重複
您的程式碼建立一個最近選擇的陣列以防止重複,並呼叫遞歸函數當所選項目位於最近的選擇中時,命名為ChooseName()。這種方法可以確保唯一性,但如果陣列大小有限,可能會導致無限循環。
這是一個遞歸函數嗎?
是的,chooseName() 會呼叫自身找到一個獨特的選擇。遞歸使函數能夠迭代數組項,直到找到最近選擇中沒有的項。
提高效率
要避免無限循環,請考慮另一種方法答案中建議:
<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; }; }</code>
此函數產生原始數組的副本並隨機選擇一個項目它。一旦使用了所有項目,它就會建立原始數組的新副本,即使數組已耗盡,也能確保唯一的選擇。
以上是如何有效率地選擇不重複的隨機數組項目?的詳細內容。更多資訊請關注PHP中文網其他相關文章!