【问题标题】:Retrieving values from corresponding keys in Ruby hash从 Ruby 哈希中的相应键中检索值
【发布时间】:2015-12-11 03:47:42
【问题描述】:

以下仅打印白线。如果这不是从 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 将是函数调用。

Try it

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

【问题讨论】:

  • 不清楚你的代码试图在 MCVE 中完成什么
  • @WandMaker 我在最终解决方案的链接中进行了编辑。它不会比我想象的更清晰,一旦它起作用就会非常简单。

标签: ruby hashmap


【解决方案1】:

在第一个循环之后,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

最终结果是,您打印空行,因为每次迭代都找不到任何内容。哈希访问没问题;问题在于代码的逻辑(而且您没有准确解释您要做什么)。

【讨论】:

  • 我最终添加了12 等作为与:FizzBuzz 等相同级别的键。 Works like a charm.
【解决方案2】:

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

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

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

确实,Hash#[] 是从哈希中检索值的方法。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2014-01-02
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      • 2015-07-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      相关资源
      最近更新 更多