首頁  >  文章  >  web前端  >  如何優化數組項隨機選擇而不重複?

如何優化數組項隨機選擇而不重複?

Linda Hamilton
Linda Hamilton原創
2024-10-30 08:14:27466瀏覽

How to Optimize Array Item Random Selection Without Repetition?

如何提高數組項隨機選擇效率

當涉及到隨機選擇數組項並避免重複時,效率起著至關重要的作用。雖然提供的程式碼有效地防止連續多次選擇相同的項目,但仍有效能增強的潛力。

關於遞歸問題,提供的函數在技術上不符合遞歸的條件,因為它不調用自身直接調用,而是透過另一個函數 (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;
  };
}

var chooser = randomNoRepeats(['Foo', 'Bar', 'Gah']);
chooser(); // => "Bar"
chooser(); // => "Foo"
chooser(); // => "Gah"
chooser(); // => "Foo" -- only repeats once all items are exhausted.</code>

透過使用此修改後的方法,您可以有效地避免重複,同時保持高效的專案選擇,而不會像類似遞歸的實作那樣進行冗長的循環迭代。

以上是如何優化數組項隨機選擇而不重複?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn