当前位置: 首页 > 面试题库 >

从PHP数组中有效地选择n个随机元素(无随机播放)

房冥夜
2023-03-14
问题内容

我有以下代码$n$arrayPHP 数组中选取元素:

shuffle($array);
$result = array_splice($array, 0, $n);

给定一个大数组,但只有几个元素(例如5out 10000),这相对较慢,因此我想对其进行优化,以使并非所有元素都必须改组。这些值必须是唯一的。

我正在寻找性能最好的替代产品。我们可以假设它$array没有重复项并且被0索引了。


问题答案:
$randomArray = [];
while (count($randomArray) < 5) {
  $randomKey = mt_rand(0, count($array)-1);
  $randomArray[$randomKey] = $array[$randomKey];
}

这将提供5个元素,而且没有重复项,而且很快。密钥将被保留。

注意:您必须确保$ array包含5个或更多的元素,或者添加某种检查以防止无限循环。



 类似资料:
  • 问题内容: 假设我有一个数组,我想随机选择一个元素。 最简单的方法是什么? 明显的方法是。但是也许有红宝石之类的东西?或者如果不能通过扩展创建这种方法? 问题答案: Swift 4.2及更高版本 推荐的新方法是Collection协议的内置方法:。它返回一个可选参数以避免我以前假设的空情况。 如果不创建数组并且不能保证count> 0,则应执行以下操作: Swift 4.1及以下 只是为了回答您的

  • 假设我有一个数组,我想随机选择一个元素。 最简单的方法是什么? 最明显的方法是数组[随机索引]。但可能有类似ruby的数组。示例 ?或者,如果不是,那么可以使用扩展创建这样的方法吗?

  • 如标题所示,我想使用Knuth-Fisher Yates洗牌算法从List中选择N个随机元素,但不使用List.toArray并更改列表。这是我目前的代码: 它使用list.toArray()创建一个新数组,以避免修改原始列表。然而,我现在的问题是,我的列表可能很大,可能有100万元素。然后list.toArray()太慢了。我的n可以从1到100万。当n很小(比如2)时,函数的效率非常低,因为它

  • 问题内容: 我有一种方法,它使用随机样本来近似计算。这种方法被称为数百万次,因此非常重要的是选择随机数的过程必须高效。 我不确定java到底有多快,但是我的程序似乎并没有像我期望的那样受益。 选择随机数时,我将执行以下操作(半伪代码): 现在,这显然具有最坏的最坏情况下的运行时间,因为理论上随机函数可以为永恒添加重复的数字,从而永远停留在while循环中。但是,数字是从{0..45}中选择的,因此

  • 问题内容: 如何选择前5个随机元素 但它需要所有随机元素。我只想要第一个5。 还有另一种方法可以做同样的事情吗? 问题答案: 这是从jQuery选择中获取5个随机元素的方法,无需插件! 此时,您已经从jQuery返回的所有LI中随机选择了5个DomElement 然后,您可以对它们进行任何操作, 例如更改其颜色: 或显示其合并的文本内容:

  • 从 array 中获取 n 个唯一键随机元素。 使用Fisher-Yates算法 对数组进行打乱。 使用 Array.slice() 获取第一个 n 元素。 省略第二个参数,n 从数组中随机取得 1 个元素。 const sampleSize = ([...arr], n = 1) => { let m = arr.length; while (m) { const i = Mat