我有两个数组:
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
现在,因为将数组b
中的每个项目与数组a
中的值的顺序对齐很重要,所以我决定编写一个each_with_index
循环,以便能够从数组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}
但是我无法在哈希中指定键来打印内容吗?这是怎么回事?
答案 0 :(得分:1)
但是我无法在哈希中指定键来打印内容吗?这是怎么回事?
这当然没有道理。如果您有哈希,则可以获取其键/值。这里的问题是您没有有哈希。相反,您的b[i]
之一为nil(这会触发错误)。
通过使用p b[i]
而不是puts b[i]
打印它们来进行检查。
答案 1 :(得分:0)
您不需要a
数组
b.map(&:values).map.with_index {|(item, quantity), index|
"#{index + 1}. #{item} #{quantity}"
}.join(' ')
=> "1. apple 92 2. banana 43 3. kiwi 55"
答案 2 :(得分:0)
尝试以下操作:
a = [1, 2, 3]
b = [{:item => 'apple', :quantity => 92}, {:item => 'banana', :quantity => 43}, {:item => 'kiwi', :quantity => 55}]
a.each_with_index do |a_value, i|
puts "#{a_value}. #{b[i][:item]} #{b[i][:quantity]}"
end
这将输出:
1. apple 92
2. banana 43
3. kiwi 55
或者如果您希望输出类似
1. apple 92 2. banana 43 3. kiwi 55
然后您可以将地图与索引一起使用
output = a.map.with_index do |a_value, i|
"#{a_value}. #{b[i][:item]} #{b[i][:quantity]}"
end.join(' ')
puts output