見てArray#shift
self の最初の要素を削除して返します (他のすべての要素を 1 つ下にシフトします)。配列が空の場合は 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
上記のように、同じ Array オブジェクトahash
を参照すると、から削除される原因も変更されます。mainhash['A']
[ 0,1,2,3,4]
ahash#shift
0
ahash
0
mainhash['A']
あなたのハッシュは以下のようになると言った:
mainhash
# => {"A"=>[1, 2, 3, 4], "B"=>[0, 1, 2, 3]}
すべての操作は正当であり、上記のリンクに記載されているとおりに行われました。
メインハッシュへの影響を回避するにはどうすればよいですか
@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]