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 |
对于一个表达式,可以省略
1 2 3 4 | def random_key(products) rand_key = rand(900) + 100 while products.has_key?(rand_key) rand_key end |
注意,方法中的最后一条语句是
尝试这样:
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之间的所有数字都在