通过窥探这里,我已经定义了用于测试未知大小的数组是否包含匹配元素的当前方法;
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
答案 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