我正在使用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
Run Code Online (Sandbox Code Playgroud)
在相关的说明中,我可以根据需要更改收集地图(并使用收集地图)或存在差异吗?
在此先感谢您的帮助!
collect(别名map)不会修改数组.它返回一个新数组.所以:
arr = arr.collect { |x| x * 2}
Run Code Online (Sandbox Code Playgroud)
如果您确实要修改数组,请使用collect!(别名map!):
arr.collect! { |x| x * 2}
Run Code Online (Sandbox Code Playgroud)
map是可以互换的collect; map!是可以互换的collect!