-3

要素の値をコピーして変更したいこの配列があります。どうすればいいですか (Ruby 1.9.3p429)

a = Array.new(2,"test")   #a => ["test","test"] #a.object_id => 21519600  #a[0].object_id => 21519612
b = a.clone               #b => ["test","test"] #b.object_id => 22940520  #b[0].object_id => 21519612 
c = a.dup                 #c => ["test","test"] #c.object_id => 22865176  #c[0].object_id => 21519612
d = Array.new(a)          #d => ["test","test"] #c.object_id => 23179224  #d[0].object_id => 21519612

c[0].upcase!  #produces   #a => ["TEST","TEST"], #b => ["TEST","TEST"], #c => ["TEST","TEST"] ...`
4

2 に答える 2

2

Rubyでは、すべてのオブジェクトは実際にはオブジェクトへの参照であるため、配列がある場合

x = [a, b, c, d]

それを別の配列にコピーします

y = x.clone

オブジェクト自体ではなく、元のオブジェクトへの参照をコピーします。

やりたいことを正確に行うには、オブジェクトをループでコピーする必要がありますが、最終的な目標を達成するのではなく、配列のコピーを達成する方法に集中しすぎて、元の大文字のアイテムで構成される新しい配列を取得します配列。

Enumerable モジュールを調べると#map#select#inject、 などのものが見つかります。たとえば、これは、すべての名前が大文字になっている配列のコピーを取得する方法です。

["test", "test"].map { |element| element.upcase }
于 2013-07-31T13:46:21.153 に答える