二维数组上的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。
答案 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 }