1

我正在使用 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

在相关说明中,我可以根据需要更改 collect with map(和 map with collect)还是有区别?

在此先感谢您的帮助!

4

1 回答 1

7

collect( 的别名map)不会就地修改数组。它返回一个新数组。所以:

arr = arr.collect { |x| x * 2}

如果您确实想就地修改数组,请使用collect!(的别名map!):

arr.collect! { |x| x * 2}

map可与collect; map!可与collect!

于 2012-10-07T01:05:51.840 回答