繰り返しを行わずに配列項目を効率的にランダムに選択する方法
コードは、繰り返しを防ぐために最近の選択の配列を作成し、再帰関数を呼び出します選択した項目が最近の選択肢にある場合は、chooseName() という名前が付けられます。このアプローチでは一意性が保証されますが、配列サイズが制限されている場合は無限ループにつながる可能性があります。
Is It a Recursive Function?
はい、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 中国語 Web サイトの他の関連記事を参照してください。