在Ruby中,什么是rand的.map方法?

时间:2018-01-08 05:16:52

标签: ruby

我是Ruby的新手,我无法理解这段代码:

3 gave 6
4 gave 10
5 gave 18 
6 gave 36

我知道它会从0-9生成一个随机数。但它与.map方法有什么关系呢。它试图在这里演出什么?此外,代码是否始终是唯一的?任何解释都非常感谢。

3 个答案:

答案 0 :(得分:4)

code = (0...16).map { rand(10).to_s }.join

用于生成包含(0到9)长度为16的随机字符串。.map将返回一个数组,其长度为迭代次数(此处为16次)。 .join用于加入所有这些16元素&返回一个字符串

2.2.4 :004 > code = (0...16).map {rand(10).to_s}
 => ["9", "2", "7", "4", "8", "2", "2", "9", "0", "8", "5", "1", "3", "2", "7", "8"] 
2.2.4 :005 > code = (0...16).map {rand(10).to_s}.join
 => "8371524929956722" 
2.2.4 :006 > code = (0...16).map {rand(10).to_s}.join
 => "4111661481960314" 
2.2.4 :007 > 

您也可以使用以下内容生成相同的结果

code = rand(10 ** 16).to_s
 => "7066995392533658"
2.2.4 :011 > code = rand(10 ** 16).to_s
 => "9149902415985481" 

答案 1 :(得分:2)

code = (0...16).map { rand(10).to_s }.join

上面的代码生成0到9次的随机数16次,并返回生成的随机数的字符串。

为了清楚地理解,让我们分解各个代码组件。

(0...16)

这将创建一个从0到15的整数范围。

(0...16).map { code-block }

这将为范围中的每个元素执行代码块并返回输出。此操作的结果是一个新数组,其中包含为每个元素计算的输出。

rand(10)

这会生成大于或等于0但小于10的随机整数。

rand(10).to_s

这会将生成的整数转换为字符串。

(0...16).map { rand(10).to_s }.join

这最终会连接我们在随机数生成后获得的每个字符串。

希望这有助于您更好地理解它。

答案 2 :(得分:0)

(0...16).map { ... }只执行块(花括号中的东西)十六次,并将执行块的十六个结果存储在一个数组中。如果你打开IRB并输入(0...16).map { rand(10).to_s },你会看到你得到一个像这样的字符串数组:

["9", "5", "3", "6", "0", "9", "5", "0", "6", "5", "2", "5", "7", "5", "5", "3"]

您应该阅读mapjoin方法的文档,了解它们的工作原理: