Ruby - 迭代嵌套哈希并计算值

时间:2011-10-16 23:02:36

标签: ruby hash nested

尽管有关嵌套哈希的问题很多,但我找不到解决问题的方法。

我正在拉入字符串并将每个字符匹配到一个哈希,如下所示:

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了,所以我可能会犯一些基本的错误。

1 个答案:

答案 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)