-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 回答
0

从您的评论来看,您似乎只想大写“ c[0]only”。我不明白你为什么需要通过 的副本来大写a,但这里是如何做到的。

a = Array.new(2){"test"}
c = a.dup
c[0].upcase!
a # => ["TEST", "test"]
于 2013-07-31T14:14:43.047 回答