簡體   English   中英

Ruby-遍歷嵌套哈希並計算值

[英]Ruby - Iterating over a Nested Hash and counting values

盡管嵌套哈希有很多問題,但我沒有找到解決問題的方法。

我輸入字符串並將每個字符匹配到一個哈希,如下所示:

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的新手,所以我可能會犯一些基本的錯誤。

您是否正在尋找這樣的東西?

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM