如何使用.each最好地修改数组

时间:2016-06-21 06:03:05

标签: arrays ruby each

我正在使用Ruby,我正在重新学习数组并试图更好地理解它们。我知道它们是什么,但从未充分利用它们。我有一个数组,赔率,并希望加倍其中的每个数字。我提出了以下解决方案;但是,我想看看是否有一个更优雅/简单的解决方案来解决我的问题。

odds = [1,3,5,7,9]

odds.each do |x|
    odds[odds.index(x)]=x*2
end

最终结果为odds = [2,6,10,14,18]

2 个答案:

答案 0 :(得分:3)

您可以使用map!枚举器修改数组中的每个项目:

odds.map!{ |x| x*2} 

答案 1 :(得分:1)

如果你真的想要进行修改,并且你真的想使用each,我想你的方法就像任何一样好。它并不像惯用语,但它确实符合您规定的约束条件。

以下是一些更常见的方法:

<强> Array.map

使用map映射数组不会修改原始数组(它不是就地),这通常是一件好事,但它可能不是你想要的寻找:

odds.map { |x| x*2 }

<强> Array.map!

如果您确实想要修改原始数组,可以使用map!映射就地

odds.map! { |x| x*2 }

<强> Array.each_index

您确实询问了each,因此如果您想使用each而想要修改原始数组,each_index可能是您最好的选择:

odds.each_index { |i| odds[i] *= 2 }