以下仅打印白线。如果这不是从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
中,3
和5
将是函数调用。
对于那些想知道我想要做什么的人,可以找到on Code Review的最终(非MCVE)结果。
答案 0 :(得分:4)
每个number
都是这种形式的哈希:
{1=>{:FizzBuzz=>1, :Prime=>3, :Fibonacci=>5}}
以数字为唯一键。当您使用Hash#[]
查找不存在的哈希键时,Ruby返回nil
。 puts 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
。