从Ruby哈希中的相应键中检索值

时间:2015-12-11 03:47:43

标签: ruby hashmap

以下仅打印白线。如果这不是从Ruby中的键检索值的方法,那么是什么?

numbers = []

for i in 1..100 do
    hash = {
        :FizzBuzz => 1,
        :Prime => 3,
        :Fibonacci => 5
    }
    numbers << { i => hash }
end

numbers.each do |number|
    puts number[:Prime]
end

请注意,这是一个MCVE,在最终申请1中,35将是函数调用。

Try it

对于那些想知道我想要做什么的人,可以找到on Code Review的最终(非MCVE)结果。

3 个答案:

答案 0 :(得分:4)

每个number都是这种形式的哈希:

{1=>{:FizzBuzz=>1, :Prime=>3, :Fibonacci=>5}}

以数字为唯一键。当您使用Hash#[]查找不存在的哈希键时,Ruby返回nilputs nil打印一个空行。

确实Hash#[]是从散列中检索值的方法。

答案 1 :(得分:4)

在第一个循环之后,numbers是这样的数组:

[
  { 1 => { :FizzBuzz => 1, :Prime => 3, :Fibonacci => 5 } },
  { 2 => { :FizzBuzz => 1, :Prime => 3, :Fibonacci => 5 } },
  ...
  { 100 => { :FizzBuzz => 1, :Prime => 3, :Fibonacci => 5 } }
]

number[:Prime]正在尝试从您的第一个数组元素中提取:Prime元素,但您只有密钥1

最终结果是,您打印空行,因为每次迭代都没有找到任何内容。哈希访问是可以的;这是你的代码的逻辑问题(你没有解释你正在尝试做什么)。

答案 2 :(得分:2)

number的键都是整数(来自i)。符号:Prime不是关键。因此结果都是nil