以下仅打印白线。如果这不是从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
中将进行函数调用。
试试
对于那些想知道我想做什么的人,可以在代码审查上找到最终(非MCVE)结果。
在第一个循环之后,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
。
最终的结果是,打印空行,因为在每次迭代中都找不到任何内容。哈希访问是可以的;问题出在代码的逻辑上(您没有准确地解释您要做什么)。
每个number
都是以下形式的散列:
{1=>{:FizzBuzz=>1, :Prime=>3, :Fibonacci=>5}}
其具有作为唯一密钥的数字。当您使用Hash#[]
查找不存在的哈希键时,Ruby会返回nil
。puts nil
打印一个空行。
事实上,Hash#[]
是从散列中检索值的方法。
number
的键都是整数(来自i
)。符号:Prime
不是密钥。因此结果都是CCD_ 16。