查找Array#shift
移除自的第一元素,並返回它(變速所有其它元素向下通過一個)。如果數組爲空,則返回nil。
mainhash = { 'A' => [ 0,1,2,3,4 ] , 'B' => [ 0 ,1,2 ,3 ] }
ahash = mainhash['A']
p ahash.object_id # => 8577888
p mainhash['A'].object_id # => 8577888
p indval = ahash.shift # => 0
如上所見,ahash
和mainhash['A']
指代相同Array對象[ 0,1,2,3,4]
,從而改變ahash#shift
原因0
從ahash
這也導致0
從mainhash['A']
去除被移除。
說你哈希變成如下:
mainhash
# => {"A"=>[1, 2, 3, 4], "B"=>[0, 1, 2, 3]}
所有的操作都是合法的,如發生對文件的鏈接,我已經在上面給出。
我怎樣才能避免影響mainhash
作爲@Marek Lipka的說:
你應該使用DUP方法:ahash = mainhash [ 'A'] DUP。
mainhash = { 'A' => [ 0,1,2,3,4 ] , 'B' => [ 0 ,1,2 ,3 ] }
ahash = mainhash['A'].dup
ahash.object_id # => 8577516
mainhash['A'].object_id # => 8577600
indval = ahash.shift # => 0
ahash # => [1, 2, 3, 4]
mainhash['A'] # => [0, 1, 2, 3, 4]
我該如何避免影響mainhash,但我仍然想要複製並操作 – Pavunkumar
@Pavunkumar您應該使用'dup'方法:'ahash = mainhash ['A']。dup'。 –