gpt4 book ai didi

ruby - 如何在 Ruby 中生成一个包含 n 个唯一随机数的列表?

转载 作者:数据小太阳 更新时间:2023-10-29 06:24:05 24 4
gpt4 key购买 nike

这是我目前所拥有的:

myArray.map!{ rand(max) }

然而,显然,有时列表中的数字不是唯一的。如何确保我的列表只包含唯一编号,而不必创建一个更大的列表,然后从中选择 n 个唯一编号?

编辑:
我真的很想看到这个没有循环的完成——如果可能的话。

最佳答案

(0..50).to_a.sort{ rand() - 0.5 }[0..x] 

(0..50).to_a 可以替换成任意数组。0是“最小值”,50是“最大值”x 是“我想要多少个值”

当然,x不可能被允许大于max-min :)

扩展其工作原理

(0..5).to_a  ==> [0,1,2,3,4,5]
[0,1,2,3,4,5].sort{ -1 } ==> [0, 1, 2, 4, 3, 5] # constant
[0,1,2,3,4,5].sort{ 1 } ==> [5, 3, 0, 4, 2, 1] # constant
[0,1,2,3,4,5].sort{ rand() - 0.5 } ==> [1, 5, 0, 3, 4, 2 ] # random
[1, 5, 0, 3, 4, 2 ][ 0..2 ] ==> [1, 5, 0 ]

脚注:

值得一提的是,在 2008 年 9 月最初回答这个问题时,Array#shuffle要么不可用,要么我不知道,因此近似值在 Array#sort

因此,出现了一连串的修改建议。

所以:

.sort{ rand() - 0.5 }

在现代 ruby​​ 实现中使用可以更好、更短地表达

.shuffle

此外,

[0..x]

可以用Array#take写得更明显作为:

.take(x)

因此,在现代 ruby 上生成随机数序列的最简单方法是:

(0..50).to_a.shuffle.take(x)

关于ruby - 如何在 Ruby 中生成一个包含 n 个唯一随机数的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/119107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com