在循环时附加散列

时间:2009-11-02 15:26:12

标签: ruby hash merge ldap

我会尽快做到这一点。我正在使用Ruby / LDAP来搜索我的base_dn标准。我得到一个结果(类型为Entry)。我可以使用to_hash方法将Entry类型的对象转换为Hash。问题是当返回结果时,它是Entry类型的多个对象。我想将它们转换为哈希在循环时附加它们。看看这个:

connection.search(base_dn,scope,filter) do |entry|
        #pp entry.to_hash
        searchResult.merge!(entry.to_hash)
end

你知道我是否在循环中并且我想将对象添加到数组中,我可以使用<<并且它将在它通过时添加它。我读了RDOC,哈希的合并或更新方法应该做类似但无济于事。有人可以给我一个关于我如何将Entry对象转换为哈希和附加的提示。

以上代码为我提供了搜索中的最后一项。它基本上每次都覆盖searchResult哈希,而不是与现有哈希合并。提前谢谢。

1 个答案:

答案 0 :(得分:2)

使用Hash#merge时!你需要提供一个正确键入的额外哈希,否则它会将你的所有结果混合在一起。

我敢打赌你真正需要的东西类似于:

connection.search(base_dn,scope,filter) do |entry|
  searchResult[entry.id] = entry.to_hash
end

这里的entry.id表示可用于拆分条目记录的唯一标识符。

由于Hash是一个键/值存储,你不能像数组那样真正“追加”它,它本质上是一个对象列表。