尽管有关嵌套哈希的问题很多,但我找不到解决问题的方法。
我正在拉入字符串并将每个字符匹配到一个哈希,如下所示:
numberOfChars = {}
string.each_char do |c|
RULES.each do |key, value|
if c === key
numberOfChars[value] += 1
end
end
end
这很好用,输出的内容就像“出现3次”,直到我意识到我的哈希需要嵌套,类似于:
RULES = {
:limb {
:colour {
'a' => 'foo',
'b' => 'bar'
},
'c' => 'baz'
}
}
那么我将如何获得'叶子'键并且它的价值呢?
当它在哈希上进行迭代时,它还需要计算每个键出现的次数,例如'a'看起来是不是'b'?如果是这样,添加到新哈希。但是我很遗憾在实践中如何工作,而不知道它将如何迭代嵌套哈希开始。
在我看来这是一种过于复杂的做法,但如果有人有任何指示,他们会非常感激!
另外,如果不是很清楚我已经不熟悉Ruby了,所以我可能会犯一些基本的错误。
答案 0 :(得分:3)
你在找这样的东西吗?
RULES = {
:limb => {
:colour => {
'a' => 'foo',
'b' => 'bar'
},
'c' => 'baz',
:color => {
'b' => 'baz'
}
}
}
def count_letters(hash, results = {})
hash.each do |key, value|
if value.kind_of?(Hash)
count_letters(value, results)
else
results[key] = (results[key] || 0) + 1
end
end
results
end
p count_letters(RULES)