首页 > 解决方案 > 如何根据索引从 each_with_index 内的数组中打印内容?

问题描述

我有两个数组:

a = [1, 2, 3]
b = [{:item => 'apple', :quantity => 92}, {:item => 'banana', :quantity => 43}, {:item => 'kiwi', :quantity => 55}]

我想要这样的输出:

1. apple 92 2. banana 43 3. kiwi 55

现在,由于 array 中的每个项目都与 arrayb中的值的顺序对齐很重要a,我决定编写一个each_with_index循环,以便能够从 array 中提取所需位置的数据b

a.each_with_index do |a_value, i| 
  puts a_value 
  puts '.' 
  puts b[i][:item] 
  puts b[i][:quantity]
end

但我收到了这个错误:

NoMethodError: undefined method `[]' for nil:NilClass
    from (irb):8:in `block in irb_binding'
    from (irb):8:in `each'
    from (irb):8:in `each_with_index'
    from (irb):8
    from C:/RailsInstaller/Ruby2.3.3/bin/irb.cmd:19:in `<main>'

我觉得这很奇怪,因为那个位置的哈希不是空的。

如果我在该位置打印数组的全部内容,它会起作用,例如:

a.each_with_index do |a_value, i| 
  puts b[i]
end

这使:

{:item => 'apple', :quantity => 92} 
{:item => 'banana', :quantity => 43} 
{:item => 'kiwi', :quantity => 55}

但我不能在哈希中指定一个键来打印内容?那是怎么回事?

标签: ruby

解决方案


但我不能在哈希中指定一个键来打印内容?那是怎么回事?

当然,这没有意义。如果你有一个哈希,你可以得到它的键/值。这里的问题是你没有哈希。相反,您的其中一个b[i]是 nil (这会触发错误)。

p b[i]通过使用而不是打印它们来检查这一点puts b[i]


推荐阅读