【问题标题】:Iterating over a multidimensional array?迭代多维数组?
【发布时间】:2013-11-26 01:04:37
【问题描述】:
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)

问题是我似乎无法访问所有数组中的第一个值。

【问题讨论】:

  • 这个 Lod 类在哪里出现?您的描述说这些是数组,而不是 Lod 对象。这些数字实际上是 Lod 对象还是什么?
  • 抱歉,内部数组是从文本文件导入的 Lod 对象: 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

标签: ruby arrays for-loop multidimensional-array


【解决方案1】:

你可以试试

a = [[10000, 150, 5], [500, 10, 1],[8000, 171, 3],[45, 92, 4]]

您可以访问 a[0][0] 10000 或 a[2][1] 171 或迭代

a.each do |row|
  row.each do |column|
      puts column  
  end
end

编辑关于使用大括号代替 do 的评论:

当然有可能,但我相信 do..end 在首选: https://stackoverflow.com/a/5587403/514463

a.each { |row|
  row.each { |column|
      puts column  
  }
}

【讨论】:

  • 有没有办法在不使用 do 关键字的情况下使用 .each 循环和块进行打印。类似a.each { |one_dimention| one_dimention.each { |number| puts number } }
  • 如果上述情况可行,请考虑更新您的答案。谢谢。
【解决方案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

【讨论】:

  • 感谢.transpose
猜你喜欢
  • 2023-03-08
  • 2014-05-17
  • 2021-11-02
  • 2011-11-20
  • 2016-01-28
  • 2020-02-17
  • 2013-01-23
相关资源
最近更新 更多