我想生成一个介于100和999之间的唯一随机数序列。我想确保没有生成两次数字,以确保每个数字都是唯一的。这就是我想出的。这是行不通的。当我运行它时,屏幕只是空白。任何人都可以帮助我吗?
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)
答案 0 :(得分:13)
a = (100..999).to_a.shuffle
然后每次你需要一个新的身份
new_id = a.pop
这可以保证数字永远不会被重用。当然,当你用完阵列上的元素时,你会遇到问题。
答案 1 :(得分:0)
请注意,方法中的最后一个语句是while
循环,如果products
为空,则不会执行。因此函数返回nil
。
试试这样:
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
答案 2 :(得分:0)
您的函数返回while表达式,该表达式始终为nil。您应该返回该号码:
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”来删除重复:
def random_key(products)
begin
rand_key = rand(900) + 100
end while products.has_key?(rand_key)
rand_key
end
您可以省略begin end
表示单个表达式
def random_key(products)
rand_key = rand(900) + 100 while products.has_key?(rand_key)
rand_key
end
答案 3 :(得分:0)
我相信Marc Talbot的回答很棒!但是,根据您的情况给出答案,让我们来解释一下,
首先,创建ID。
on_epoch_end
现在,您可以避免使用val_accuracy
,方法,ids = (100..999).to_a.shuffle
等,而只需调用while
has_key?
最终的代码版本是:
ids.pop
结果将是:
products[ids.pop] = {}