我只是学习Ruby,所以如果这对于这里来说太新手太过道歉,但是我无法从镐书中解决这个问题(可能只是没有仔细阅读)。 无论如何,如果我有这样的数组:
arr = [1,2,3,4,5]
...我想比较一下,将数组中的每个值乘以3,我已经做了以下工作:
arr.each {|item| item *= 3}
...不会得到我想要的东西(我理解为什么,我不是在修改数组本身)。
我没有得到的是如何在迭代器之后从代码块内部修改原始数组。我相信这很容易。
答案 0 :(得分:127)
使用map
从旧数组创建一个新数组:
arr2 = arr.map {|item| item * 3}
使用map!
修改数组:
arr.map! {|item| item * 3}
查看在线工作:ideone
答案 1 :(得分:17)
要直接修改数组,请使用arr.map! {|item| item*3}
。要基于原始数据创建新数组(通常更可取),请使用arr.map {|item| item*3}
。事实上,在使用each
之前我总是三思而后行,因为通常有一个更高阶的函数,例如map
,select
或inject
,它可以完成我想要的工作。
答案 2 :(得分:5)
arr.collect! {|item| item * 3}