2017-07-18 111 views
0

我试图打印出作为参数传递给方法时散列键的值。传递散列键作为参数打印出散列值

例如count_arara(3)会导致“埃达克安恩”

def count_arara(n, h = {}) 
h.each do |k, v| 
    if n == h[k] 
    h[v] 
    end 
    end 
end 


count_arara(3, { 

    1 => 'anane', 
    2 => 'adak', 
    3 =>'adak anane', 
    4 =>'adak adak', 
    5 =>'adak adak anane', 
    6 =>'adak adak adak', 
    7 =>'adak adak adak anane', 
    8 =>'adak adak adak adak' 

}) 

谁能好心把我推到正确的方向没有告诉我答案?

+0

那么'n'应该是你的情况?它是散列还是密钥?你自然需要两者。 –

+0

我传递n作为一个散列,包含键和值。 – Benjamints

+0

“例如count_arara(3)应该导致'adak anane'”? –

回答

0

散列是一个结构,它保持相关联。

CODE_TO_NAME = { 
    'CH' => 'SWITZERLAND', 
    'DE' => 'GERMANY', 
    ... 
} 

这里的国家代码(两个字母串)的关键在于查找完整的国家名称。 'CH'是'瑞士'等的关键。

要为两个字母组成的代码,你可以做打印长国名:

puts CODE_TO_NAME['CH'] 

这将打印“瑞士”。

现在在你的例子中,你正在遍历所有的键/值对。如果密钥(3与该键关联的值相匹配

你可能会想要做的事,如:

hash.each do |key, value| 
    if key == number 
    puts "value: #{value}" 
    end 
end 

但就是过于复杂,还有一个更容易找到相关的值的方法与特定键(这是一个散列适用于):

puts hash[key] 

我认为这应该是足够的重新考虑你的方法还你应该给方法和参数的详细描述性的名称