简介
从数组中随机选择一个项目而不重复是一种常见的编程任务。然而,如果项目池不断被修改,确保效率就变得至关重要。
问题
开发者实现了一个从数组中随机选择项目的功能同时保留最近选择的列表以避免重复。然而,他们对其效率表示担忧,并询问是否有更优化的方法。
回答
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中文网其他相关文章!