在Ruby中创建Hash的新实例

时间:2015-07-27 17:51:53

标签: ruby-on-rails ruby hash jruby jrubyonrails

我是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

我不想为每次迭代初始化新的哈希值,针对此问题的任何解决方案?

1 个答案:

答案 0 :(得分:5)

  

我不想为每次迭代初始化新的哈希

为什么不呢?这背后的原因是什么?你必须,否则它无法工作。

如果每次迭代都没有创建新哈希,那么每次都会将相同的哈希推送到数组中。数组中的每个元素都是相同的对象,共享相同的状态。只有一个哈希,当你清除它时,显然也会清除对同一个哈希的所有引用,因为它们都是同一个对象。

  

针对此问题的任何解决方案?

是的,你已经拥有它:你需要在每次迭代时创建一个新的哈希值。