我是Ruby的新手,我在Ruby中使用HashWithIndifferentAccess作为哈希特性。所以我的代码就像:
def someFunction
array_list = []
some_array.each do | x |
new_hash = HashWithIndifferentAccess.new
// add entries to new_hash
array_list.push(new_hash)
end
array_list
end
问题是:对于每次迭代我都在初始化新哈希,但如果我这样做,则array_list中的条目变为空:
def someFunction
array_list = []
new_hash = HashWithIndifferentAccess.new
some_array.each do | x |
// add entries to new_hash
array_list.push(new_hash)
new_hash.clear
end
array_list
end
我不想为每次迭代初始化新的哈希值,针对此问题的任何解决方案?
答案 0 :(得分:5)
我不想为每次迭代初始化新的哈希
为什么不呢?这背后的原因是什么?你必须,否则它无法工作。
如果每次迭代都没有创建新哈希,那么每次都会将相同的哈希推送到数组中。数组中的每个元素都是相同的对象,共享相同的状态。只有一个哈希,当你清除它时,显然也会清除对同一个哈希的所有引用,因为它们都是同一个对象。
针对此问题的任何解决方案?
是的,你已经拥有它:你需要在每次迭代时创建一个新的哈希值。