当我在Ruby中迭代时,如何修改数组?

时间:2009-11-21 00:07:20

标签: ruby arrays iteration

我只是学习Ruby,所以如果这对于这里来说太新手太过道歉,但是我无法从镐书中解决这个问题(可能只是没有仔细阅读)。 无论如何,如果我有这样的数组:

arr = [1,2,3,4,5]

...我想比较一下,将数组中的每个值乘以3,我已经做了以下工作:

arr.each {|item| item *= 3}

...不会得到我想要的东西(我理解为什么,我不是在修改数组本身)。

我没有得到的是如何在迭代器之后从代码块内部修改原始数组。我相信这很容易。

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之前我总是三思而后行,因为通常有一个更高阶的函数,例如mapselectinject,它可以完成我想要的工作。

答案 2 :(得分:5)

arr.collect! {|item| item * 3}