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

bra*_*rad 82 ruby arrays iteration

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

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

...而且我想,比如说,将数组中的每个值乘以3,我已经计算出执行以下操作:

arr.each {|item| item *= 3}
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*ers 129

用于map从旧数组创建一个新数组:

arr2 = arr.map {|item| item * 3}
Run Code Online (Sandbox Code Playgroud)

使用map!修改数组到位:

arr.map! {|item| item * 3}
Run Code Online (Sandbox Code Playgroud)

看到它在线工作:ideone

  • 如果你真的需要修改每个元素,使用map肯定会更优雅,imho. (2认同)
  • 如果你想修改数组本身使用map!代替 (2认同)

Chu*_*uck 17

要直接修改数组,请使用arr.map! {|item| item*3}.要创建基于原始数据的新数组(通常更可取),请使用arr.map {|item| item*3}.事实上,我在使用之前总是三思而后行each,因为通常有一个更高阶的函数map,select或者inject那就是我想要的.


小智 5

arr.collect! {|item| item * 3}
Run Code Online (Sandbox Code Playgroud)