我正在尝试将数组放到另一个现有数组中,而且还要将其所有项目放到现有的数组中。这是最小的例子:
require "set"
def add(myarr, bigarr, myset)
bigarr << myarr
myset |= Set.new(myarr)
end
bigarr = []
myset = Set.new
add([1, 2], bigarr, myset)
哪个会产生bigarr = [1, 2]
..好的,但是myset = {}
..是空的。我对在Ruby中传递参数知之甚少(应该是按值) - 在数组的情况下,值应该是对其内容的引用,那么我不知道set的值是什么。
问题是:
Array
和Set
之间的实质差异是什么?提前致谢!
答案 0 :(得分:1)
这与数组和集之间的差异没有任何关系。您正在使用<<
方法修改数组,但是您正在使用myset
运算符重新分配|=
变量。你永远不会修改你传入的集合。你想要的可能是myset.merge(myarr)
。
答案 1 :(得分:1)
这里的问题实际上来自这个特定的行:
myset |= Set.new(myarr)
在这里,您将在旧变量名称上创建新对象。您将一个指针替换为另一个指针,但这只会修改它的本地副本。原始对象仍然存在于内存和外部函数中,指针将指向旧对象(空集)(tbh:我不会真的鼓励这种带有副作用的ruby中的写法)。
如果您将其更改为
require "set"
def add(myarr, bigarr, myset)
bigarr << myarr
myset.add(myarr)
end
bigarr = []
myset = Set.new
add([1, 2], bigarr, myset)
它正常工作 - 因为您修改现有对象而不创建新对象。
这里有一个很好的答案,就在这里:https://stackoverflow.com/a/16464640/1975116