在Ruby中生成非重复随机数

Generate non-repeating random numbers in Ruby

我想生成一个100到999之间的唯一随机数序列。我要确保没有两次生成数字,以确保每个数字都是唯一的。这是我想出来的。它不起作用。当我运行它时,屏幕是空白的。有人能帮我吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
products = {}

def random_key(products)

  rand_key = rand(900) + 100

  while products.has_key?(rand_key)

    rand_key = rand(900) + 100

  end

end

puts random_key(products)


1
a = (100..999).to_a.shuffle

每次你需要新的身份证

1
new_id = a.pop

这就保证了数字永远不会被重用。当然,当数组中的元素用完时会出现问题。


函数返回while表达式,该表达式始终为零。您应该返回数字:

1
2
3
4
5
6
7
def random_key(products)
  rand_key = rand(900) + 100
  while products.has_key?(rand_key)
    rand_key = rand(900) + 100
  end
  rand_key
end

请注意,您可以在生成密钥后放置"while"来删除重复:

1
2
3
4
5
6
def random_key(products)
  begin
    rand_key = rand(900) + 100
  end while products.has_key?(rand_key)
  rand_key
end

对于一个表达式,可以省略begin end

1
2
3
4
def random_key(products)
  rand_key = rand(900) + 100 while products.has_key?(rand_key)
  rand_key
end


注意,方法中的最后一条语句是while循环,如果products为空,则不会执行该循环。因此函数返回nil

尝试这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
products = {}

def random_key(products)

  rand_key = rand(900) + 100

  while products.has_key?(rand_key)

    rand_key = rand(900) + 100

  end

  rand_key

end

puts random_key(products)

然而,请注意,一旦100到999之间的所有数字都在products中,这就有可能进入无限循环。