class Lod
attr_accessor :lodnr
attr_accessor :lobnr
attr_accessor :stknr
def initialize(lodnr, lobnr, stknr)
@lodnr = lodnr
@lobnr = lobnr
@stknr = stknr.chomp
end
def to_s
"%8s, %5s, %3s" % [@lodnr, @lobnr, @stknr]
end
end
我有一个名为sold
的数组,其中包含以下四个数组:
[10000, 150, 5]
[500, 10, 1]
[8000, 171, 3]
[45, 92, 4]
四个数组是从.txt文件导入的类的对象。
input = File.open("lodsedler.txt", "r")
input.each do |line|
l = line.split(',')
if l[0].to_i.between?(0, 99999) && l[1].to_i.between?(1, 180) && l[2].to_i.between?(1, 10)
sold << Lod.new(l[0], l[1], l[2])
else
next
end
end
我想计算每个数组中的第一个值,查找随机选择的数字,该数字存储在first
中。
我得到的错误总是这样,无论我怎么做:
Undefined method xxx for #Lod:0x0000000022e2d48> (NoMethodError)
问题是我似乎无法访问所有数组中的第一个值。
答案 0 :(得分:6)
你可以尝试
a = [[10000, 150, 5], [500, 10, 1],[8000, 171, 3],[45, 92, 4]]
您可以访问[0] [0] 10000或[2] [1] 171或迭代
a.each do |row|
row.each do |column|
puts column
end
end
编辑评论使用大括号而不是do:
当然有可能,但我相信做...首选: https://stackoverflow.com/a/5587403/514463
a.each { |row|
row.each { |column|
puts column
}
}
答案 1 :(得分:2)
获取每个子数组的第一个元素的简单方法是使用转置:
special_number = 45
array = [
[10000, 150, 5],
[500, 10, 1],
[8000, 171, 3],
[45, 92, 4]
]
p array.transpose.first.count(special_number) #=> 1
编辑:实际上更简单,更直接......
p array.map(&:first).count(special_number) #=> 1