【发布时间】:2018-03-24 01:54:27
【问题描述】:
我正在使用以下方法生成 10 个随机数字:
10.times.map {|i| (0...9).to_a[rand(10)] }.join
但是如果你运行它,你会注意到它没有给你 10 个随机数字。我不明白为什么。 times 迭代器将运行 10 次:
10.times
对于每次调用迭代器,我们还将 map 调用链接到它并传递一个黑色。这样可以确保块的内容也会被调用 10 次:
10.times.map {|i| }
在块内部,我们采用一个区间,即一组具有开头和结尾的值。在 Ruby 中,我们可以使用 range 来做到这一点。我们取从 0 到 9 的数字范围。
(0...9)
我们在范围上调用 to_a,它将获取范围内的所有元素并将它们作为索引粘贴到数组中。 to_a 有一个类方法[]。这会根据传入的给定值为原始数组中的每个项目返回一个新数组。
to_a[]
当 max 为 Integer 时,rand 返回一个大于或等于 0 且小于 max 的随机整数。我们使用 rand 来生成我们的新值。
rand
由于 10.times 被调用了 10 次,我们应该有 10 个介于 0 和 9 之间的随机数字,包括 0 和 9。我们只是在最后使用 join 来组合它们:
join
但我运行它并没有给我 10 个数字:
10.times.map {|i| (0...9).to_a[rand(10)] }.join
=> "151063260"
我做错了什么?
【问题讨论】:
-
附带说明,我还使用 insert 来添加连字符:str.insert(3,"-")
-
这里的关键是...不包括在内,但..是包括在内。
标签: ruby