我想创建一个更快的解析器的SOAP API,将xml变成一个散列,并匹配的内存加载架构的密钥基于YML结构。我用紫菜将XML解析成一个哈希:更好的方法来检索红宝石哈希中的匹配键的值
hash1 = { :key1 => { :@attr1=> "value1", :key2 => { :@attribute2 => "value2" }}}
(旧的Ruby语法,以保持属性从按键清晰)
同时我有一个加载到内存中一个常数并存储相关按键需要为我的行为:
hash2 = {:key1 => { :key2 => { :@attribute2 => nil }}}
(旧的Ruby语法,以保持属性从按键清晰)
我需要以最有效的方式将第一个散列与第二个散列匹配。按我的理解,有很多方法可以做到这一点:
遍历同时两个散列密钥,但使用第二个为原点:(?多语法,¿清晰)
def iterate(hash2, hash1)
hash2.each do |k, v|
if v.is_a? Hash
iterate(hash2[k], hash1[k])
else
hash2[k] = hash1[k]
end
end
end
一些问题,我想起:
- 有没有更有效的方法来做到这一点,而不必遍历 我所有的钥匙?
- 这比直接访问密钥效率更高吗?
- 有没有更好的方法来解析XML到一个哈希使用哈希2 内访客模式?
我不认为你能避免重复,当你嵌套需要递归哈希...我看来,像只有第三个问题(重新设计)可以探索更有效的路径...也许是有避免需要匹配哈希的方法...?或者,您可以使用StringScanner并编写您自己的解析器... – Myst