【发布时间】:2011-10-18 00:42:03
【问题描述】:
尽管有很多关于嵌套哈希的问题,但我没有找到任何解决问题的方法。
我正在拉入字符串并将每个字符与哈希匹配,如下所示:
numberOfChars = {}
string.each_char do |c|
RULES.each do |key, value|
if c === key
numberOfChars[value] += 1
end
end
end
这很好,会输出类似“a 出现 3 次”的内容,直到我意识到我的哈希需要嵌套,类似于:
RULES = {
:limb {
:colour {
'a' => 'foo',
'b' => 'bar'
},
'c' => 'baz'
}
}
那么我将如何获得“叶”键及其价值?
在迭代哈希时,它还需要计算每个键出现的次数,例如'a' 出现的次数比 'b' 多吗?如果是这样,请添加一个新哈希。但是我很不知道它在实践中是如何工作的,不知道它将如何迭代嵌套哈希。
在我看来,这样做是一种过于复杂的方式,但如果有人得到任何指点,他们将不胜感激!
另外,如果还不是很清楚我是 Ruby 新手,那么我可能会犯一些基本错误。
【问题讨论】:
-
您使用的是什么版本的 ruby? (ruby -v) 当我尝试使用您的 RULES 示例时,Ruby 会抱怨。
-
见下面的例子。您在 RULES 设置中缺少一个 cmets。
-
@NoahClark 我使用的是 1.9.2,不过你是对的,在那个示例中我确实错过了一个逗号,我已经对其进行了编辑以包含它。
-
我认为它可能会抱怨的原因是因为我们使用了不同版本的 ruby。 1.9 与以前的版本不同。如果下面的答案回答了您的问题,您应该接受它。如果您不这样做,那么人们将来回答您的问题的可能性就会降低。
-
你试过使用递归吗?这至少可以让你访问叶节点。