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



以下仅打印白线。如果这不是从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,在最终应用程序135中将进行函数调用。

试试

对于那些想知道我想做什么的人,可以在代码审查上找到最终(非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会返回nilputs nil打印一个空行。

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

number的键都是整数(来自i)。符号:Prime不是密钥。因此结果都是CCD_ 16。

最新更新