假设我在 ruby 中创建了以下数组:
a = ["apple", "cherry"]
b = a.dup
这里,b 是 a 的浅拷贝。所以如果我这样做:
a.each{|fruit| fruit << " pie"}
我得到的 a 和 b 都等于 ["apple pie", "cherry pie"]。那里没问题。但是假设我改变了 b 的一个元素:
b[1] = "blueberry"
并发出相同的“每个”命令。现在 b 是 ["apple pie", "blueberry"],因为 a[0] 和 b[0] 是相同的字符串,但 a[1] 和 b[1] 是不同的字符串。我可以在 a 和 b 上运行命令,但是 b 是 ["apple pie pie", "blueberry pie"],因为我已经对同一个字符串运行了两次附加操作。
有没有办法在不重复的情况下修改a和 b 的所有字符串。在这个简单的示例中,我可以测试子字符串“pie”,但这不适用于其他类型的更改(例如删除第一个字符)。
我尝试创建一个包含所有字符串的集合,以便每个字符串都是唯一的;但似乎集合创建复制了字符串,因此无法就地修改它们。有没有办法测试两个字符串在内存中是否相同?我已经用谷歌搜索了,但什么也没找到。
它的应用是我有很大的字符串数组,我“复制”它们来创建它们的历史。现在我想对整个历史应用更改,而不是双重应用(或三重等)更改。