2014-10-05 84 views
0

我在編寫一個類來迭代散列或嵌套散列的散列時遇到了困難,下面是我擁有的散列的一個示例。編寫一個遍歷哈希散列的類

hash = {a => {:number => 1, :color => "blue", :language => english} b => {:number => 2, :color => "red", :language => english} 

我想寫類的方法,將返回各自母

+2

'了''english'和'B'不是文字。在最後需要兩個哈希和一個'}'之間的逗號。也許你想要':a',':b'和''english「'。請編輯更正。在發佈之前,請始終使用IRB或PRY測試您的示例。 – 2014-10-05 19:22:48

回答

1

所有你需要的是一個方法,而不是一類的數量。以下是您可以使用的幾種方法。

def numbers(h)  
    Hash[h.map { |k,v| [k, v[:number]] }] 
end 

h = { :a => {:number => 1, :color => "blue", :language => "english" }, 
     :b => {:number => 2, :color => "red", :language => "english" } } 

numbers(h) 
    #=> {:a=>1, :b=>2} 

或使用Ruby 2.1:

def numbers(h)  
    h.map { |k,v| [k, v[:number]] }.to_h 
end 

返回相同的哈希另一種方式:

def numbers(h)  
    h.each_with_object({}) { |(k,v),g| g[k] = v[:number] } 
end