如何找到从文件中读取的二维数组元素的出现次数?

时间:2018-08-30 13:15:43

标签: arrays json ruby

二维数组上的Array.count方法有问题。

我从以前存储过的文件中加载二维数组,如下所示:

[[1, 1, 1, 1, 1, 2, 2, 1, 1, 1], [1, 1, 1, 1, 1, 2, 2, 1, 1, 1], [1, 1, 1, 1, 1, 2, 2, 1, 1, 1], [1, 1, 1, 1, 1, 2, 2, 1, 1, 1], [1, 1, 1, 1, 1, 2, 2, 1, 1, 1], [1, 1, 1, 1, 1, 2, 2, 1, 1, 1], [1, 4, 4, 5, 1, 2, 2, 1, 1, 1], [1, 4, 4, 5, 1, 2, 2, 1, 1, 1], [1, 4, 4, 1, 2, 2, 1, 1, 1, 1], [1, 4, 4, 1, 0, 0, 1, 1, 1, 1]]

我制作了一个名为Maps的课程:

require 'json'
class Maps 

  def initialize(filename)
    @map = JSON.parse(File.read(filename))
  end

  def isCorrupted?
    @map.count(0) > 1 ? true : false
  end

end

当我尝试使用我的类方法isCorrupted时?结果总是错误的。

require_relative 'classes/maps'

current_map = Maps.new("test.txt")
puts current_map.isCorrupted?

我不明白为什么该方法在十个子数组中找不到两个 0 并返回 FALSE

我还尝试修改该方法以获取计数出现次数,例如:

@map.count(0)

,但结果始终为 0

有人可以帮助我吗?我需要知道全局数组中的零总数。

Edit-2:我需要Flatten。

2 个答案:

答案 0 :(得分:3)

在这里无法使用flatten

如果只需要检查嵌套数组中是否存在任何 0,这样做将是有效的优化。但这不是您在这里所做的;您要检查多个 0是否出现在任何数组中。

例如,您想将以下内容视为未损坏,但poashin的回答将其视为已损坏:

[[0, 1], [1, 0]]

因此,您应该遍历数组:

require 'json'

class Maps 
  def initialize(filename)
    @map = JSON.parse(File.read(filename))
  end

  def is_corrupted?
    @map.any? { |row| row.count(0) > 1 }
  end
end

(要点:我遵循ruby style guide conventions here,并使用snake_case作为方法名称,而不是camelCase。)

答案 1 :(得分:0)

现在,您的代码无法按预期的方式运行,从而导致您尝试对数组集合(而非整数)中的0个元素进行计数。

如果您需要知道所有子数组中总共是否有两个以上的零:

@map.flatten.count(0) > 1

如果您想知道是否有包含一个或多个零的子数组,则应使用另一种方法:

@map.any? { |collection| collection.count(0) > 1 }