检查二维数组中的所有元素是否都相等(Ruby)

时间:2019-02-10 12:47:58

标签: arrays ruby multidimensional-array

通过窥探这里,我已经定义了用于测试未知大小的数组是否包含匹配元素的当前方法;

def matching_elements? array
array.uniq.length == 1
end

我正尝试使用以下内容将其扩展为覆盖未知大小的二维数组;

def all_elements_identical? array
array.each { |subarray| matching_elements?(subarray) }
end

上面为每个子数组返回true/false,但是我很难考虑在条件语句中使用组合方法的结果的方法。我想根据2d数组是否包含匹配元素来做事,因此对于“测试”数组,以下两项都必须为真

matching_elements?(test)
all_elements_identical?(test)

这是我一直在使用的代码,并且使用“放置”来向我确认这些方法已达到我的预期目的,但是我不知道如何将返回的信息转换为条件语句,由代码注释中的括号指示;

test = [[2,2,2,2,2,2],
        [2,2,2,2,2,2],
        [2,2,2,2,2,2],
        [2,2,2,2,2,2],
        [2,2,2,2,2,2],
        [2,2,2,2,2,2],
        [2,2,2,2,2,2]]

def is_identical? array
array.uniq.length == 1
end

def all_identical? array
array.each { |subarray| puts is_identical?(subarray)} 
end

print "Primary array contains matching elements? "
puts is_identical?(test)
puts "Subarrays each contain matching elements?"
all_identical?(test)

=begin
  if (2d elements are all identical) == true
    "YAY"
  end
=end

3 个答案:

答案 0 :(得分:0)

我不确定这是否是最有效的方法,但这是我能想到的最好的主意:

def all_elements_identical? array
    matching_elements? array.flatten
end

答案 1 :(得分:0)

要像以前一样检查一维数组:

test[0].uniq.size == 1

要检查2D数组,请执行以下操作:

test.uniq.size == 1

test.all? { |e| e == test.first }

答案 2 :(得分:0)

除了这个简单的1根衬纸,您什么都不需要

[[1,2,3],[1,2,3],[1,2,3]].uniq.count == 1 #=> true

[[1,2],[1,2,3],[1,2,3]].uniq.count == 1 #=> false