如何理解Ruby的.each和.map

bil*_*ill 5 ruby arrays

我无法理解之间的差异mapeach,以及何时何地使用它们.

我读过" 地图做什么? "和" Ruby Iterators "但是想要一些澄清.

如果我有:

 z = [1,2,3].map {|x| x + 1}
Run Code Online (Sandbox Code Playgroud)

map获取数组中的每个元素z并为每个元素添加一个元素,但是除非我添加,否则它不会改变原始数组!.

另一方面:

y = [1,2,3].each {|x| x + 1}
Run Code Online (Sandbox Code Playgroud)

回报[1,2,3].这对我来说很困惑,因为:

names = ['danil', 'edmund']
names.each { |name| puts name + ' is a programmer' }
Run Code Online (Sandbox Code Playgroud)

收益:

Danil is a programmer
Edmund is a programmer
Run Code Online (Sandbox Code Playgroud)

在我的第二个例子中,不允许每个数组元素增加的内容是什么1,而在最后一个例子中,字符串被附加到数组中的所有内容?

所有的学分都交给了Speransky Danil,我把这些例子都拿走了.

Mun*_*lam 6

map方法采用enum给定的某个块,并迭代它以执行一些逻辑。在你的情况下,逻辑是x+1。正如你所说,除非你使用它,否则它不会改变任何东西!

each只是返回正在调用的数组。

让我们举个例子:

names = ["bob"]
Run Code Online (Sandbox Code Playgroud)

如果我们这样做:

names.each{|names| names + "somestring"}
Run Code Online (Sandbox Code Playgroud)

输出仍然是["bob"]. 您的第二个示例不同的原因是由于puts.

作为练习,尝试这样做:

y = [1,2,3].each {|x| puts x + 1}
Run Code Online (Sandbox Code Playgroud)

你会得到:

2
3
4
 [1,2,3]
Run Code Online (Sandbox Code Playgroud)