Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk Memilih Item Tatasusunan Secara Rambang Tanpa Pengulangan?

Bagaimana untuk Memilih Item Tatasusunan Secara Rambang Tanpa Pengulangan?

Susan Sarandon
Susan Sarandonasal
2024-10-31 03:54:01770semak imbas

How to Efficiently Select Array Items Randomly Without Repetition?

Memilih Item Tatasusunan Dengan Cekap Secara Rawak Tanpa Pengulangan

Anda telah mencipta fungsi yang memilih item secara rawak daripada tatasusunan, memastikan pilihan terkini tidak berulang. Walaupun penyelesaian semasa berfungsi dengan berkesan, anda mempunyai kebimbangan tentang kecekapannya dan sama ada ia boleh menyebabkan gelung yang berlebihan. Mari kita teroka pendekatan yang lebih cekap.

1. Pertimbangan Rekursi

Ya, fungsi chooseName() anda boleh dianggap rekursif kerana ia memanggil dirinya sendiri sehingga ia menemui nama unik. Rekursi boleh berguna untuk masalah tertentu, tetapi penting untuk mengambil kira penggunaan tindanan dan potensi kedalaman yang berlebihan.

2. Penyelesaian yang Cekap

Untuk menangani kebimbangan kecekapan, kami boleh menggunakan strategi yang berbeza. Daripada bergantung pada rekursi dan gelung sehingga nama unik ditemui, kita boleh membuat salinan tatasusunan asal dan memilih item secara rawak daripada salinan sehingga semua item dipilih. Setelah semua item habis, kami menetapkan semula salinan kepada keadaan asalnya.

Berikut ialah pelaksanaan JavaScript bagi pendekatan ini:

<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']);
console.log(chooser()); // => "Bar"
console.log(chooser()); // => "Foo"
console.log(chooser()); // => "Gah"
console.log(chooser()); // => "Foo" -- only repeats once all items are exhausted.</code>

Pendekatan ini menggunakan kaedah array slice() JavaScript untuk buat salinan cetek tatasusunan asal. Ia kemudian berulang kali memilih item rawak daripada salinan dan mengeluarkannya daripada salinan, dengan berkesan meniru pemilihan rawak tanpa ulangan sehingga semua item habis. Setelah semua item dipilih, salinan ditetapkan semula, membenarkan pemilihan rawak bermula semula.

Atas ialah kandungan terperinci Bagaimana untuk Memilih Item Tatasusunan Secara Rambang Tanpa Pengulangan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn