我正在使用collect方法来更改数组的值。我期待更改数组的值,但这不会发生。在下面的代码中,数组已初始化,值设置为1,2,3,4,5。我将这些值打印到屏幕上,以显示任何更改之前的值。
在将原始数组打印到屏幕后,我遍历数组并使用任何可枚举的.collect方法更改值。
当我将'arr'的值打印到屏幕上时(参见下面的最后一行代码),它会输出与开始数组完全相同的输出!简而言之,'arr'的值在使用collect迭代数组之前和之后是相同的。我预计第一个看法是[1,2,3,4,5],第二个看法是[2,4,6,8,10]。
你能看到我在这里缺少的东西吗?
arr = [1,2,3,4,5]
puts arr # outputs 1 2 3 4 5
arr.collect { |x| x * 2 }
puts arr # still outputs 1 2 3 4 5 - not 2 4 5 8 10 as I expect
在相关的说明中,我可以根据自己的意愿更改收藏地图(并使用收藏地图)吗?
提前感谢您的帮助!
答案 0 :(得分:7)
collect
(map
的别名)不会修改数组。它返回一个新数组。所以:
arr = arr.collect { |x| x * 2}
如果您确实要修改数组,请使用collect!
(map!
的别名):
arr.collect! { |x| x * 2}
map
可与collect
互换; map!
可与collect!