【发布时间】:2013-12-14 19:59:55
【问题描述】:
我有这个代码 -
number1, number2, number3, number4, number5 = Array.new(5) { rand(99999)+1 }
如何确保每个数字都是唯一的? 另外 - 是否可以将所有数字输出为 5 位数字?喜欢 00147 而不是 147?
感谢您的帮助!
【问题讨论】:
我有这个代码 -
number1, number2, number3, number4, number5 = Array.new(5) { rand(99999)+1 }
如何确保每个数字都是唯一的? 另外 - 是否可以将所有数字输出为 5 位数字?喜欢 00147 而不是 147?
感谢您的帮助!
【问题讨论】:
list = []
(list << '%05i' % (rand(99999)+1)).uniq! while list.length < 5
number1, number2, number3, number4, number5 = list
【讨论】:
[].tap {|a| (a << '%05i' % (rand(99999)+1)).uniq! while a.length < 5} 消除list。我更喜欢你的做法,但认为值得一提。
这对我来说似乎是最简单的方法。每个数字都保证是唯一的。
array = (1...99999).to_a
unique_randoms = 5.times.map { '%05i' % array.delete_at(rand(array.length)) }
【讨论】:
def get_unique_random(n)
a = []
while n > 0 do
r = "%05d" % (rand(99999)+1)
(a << r; n -= 1) unless a.include?(r)
end
a
end
get_unique_random(5)
[编辑:我修复了我通过编辑引入的错误。 (曾经这样做过吗?)以前我有:
r = rand(99999)+1;
(a << "%05d" % r; n -= 1) unless a.include?(r)
我将把它作为一个练习来发现错误。]
【讨论】:
get_unique_random(5) 返回一个由五个随机数组成的数组。
n 是每当一个元素被添加到数组中时递减。也许我今天有点密集。请解释一下。
-=1不执行重复的情况。