【问题标题】:How to get different random numbers in array? [duplicate]如何在数组中获取不同的随机数? [复制]
【发布时间】:2013-12-14 19:59:55
【问题描述】:

我有这个代码 -

number1, number2, number3, number4, number5 = Array.new(5) { rand(99999)+1 }

如何确保每个数字都是唯一的? 另外 - 是否可以将所有数字输出为 5 位数字?喜欢 00147 而不是 147?

感谢您的帮助!

【问题讨论】:

    标签: ruby random


    【解决方案1】:
    list = []
    (list << '%05i' % (rand(99999)+1)).uniq! while list.length < 5
    number1, number2, number3, number4, number5 = list
    

    【讨论】:

    • 您可以用[].tap {|a| (a &lt;&lt; '%05i' % (rand(99999)+1)).uniq! while a.length &lt; 5} 消除list。我更喜欢你的做法,但认为值得一提。
    • 不应该是list.length
    • @bjhaid,如果你先运行代码,你就不会问了。 (我说这是最近在评论中提出错误建议的人,因为我没有先检查代码。:-))。
    • 你能告诉我为什么我不能使用这些数字进行数学计算的诀窍在哪里吗?我应该为此改变什么?比如,为数字加一或除以 2 等。
    • @CarySwoveland gotcha,在到达子句之前附加列表
    【解决方案2】:

    这对我来说似乎是最简单的方法。每个数字都保证是唯一的。

    array = (1...99999).to_a
    unique_randoms = 5.times.map { '%05i' % array.delete_at(rand(array.length)) }
    

    【讨论】:

    • 变化很小,但您可能会得到重复。
    • 如何在这里定义变量的数字?稍后我需要将它们插入不同的位置。
    • @Vache 我更新了我的答案。想法?
    • @ReinholdsRrazums 这些数字位于一个名为 unique_randoms 的数组中,该数组由块填充。
    • 它可以工作,但你生成了一个 99999 元素数组。 :/ 那是相当的开销!
    【解决方案3】:
    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) 返回一个由五个随机数组成的数组。
    • @Cary 有时它会返回一个由四个随机数组成的数组。
    • @steenslag,我看到,在我进行编辑之前,返回的数组可能包含重复项,但我不明白它如何返回四个随机数,考虑到 n 是每当一个元素被添加到数组中时递减。也许我今天有点密集。请解释一下。
    • 我今天好像也有点密集了,错过了-=1不执行重复的情况。
    猜你喜欢
    • 2018-11-26
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2020-04-19
    • 2017-03-08
    • 2012-12-16
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多