En regardant ici, j'ai défini la méthode actuelle de test si un tableau de taille inconnue contient des éléments correspondants;
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 Réponses :
Je ne suis pas sûr que ce soit le moyen le plus efficace de le faire, mais c'est la meilleure idée que je pouvais penser:
Pour vérifier une matrice de dimension, comme vous l'avez déjà fait:
test.all? { |e| e == test.first }
test.all? code> a la vertu de revenir dès qu'un élément est deferent.
Vous n'avez besoin de rien de plus que ce simple 1 doublure
[[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
Votre question n'est pas claire. Mettre à jour et fournir un exemple de cas de test. Sinon, pourquoi ne pouvez-vous pas simplement utiliser l'opérateur de comparaison `==` i.e.
array_a == array_b code>?Bonjour @lacostenycoder - Je viens de mettre à jour le poste, j'espère que c'est plus clair. Vous ne savez pas comment j'utiliserais l'opérateur de comparaison dans ce cas ... des conseils?
Tout ce dont vous avez besoin est
arr.flatten.uniq.size == 1 code> pour n'importe quel niveau de nid de matrice.Bon à savoir, merci @CarySwoveland - édité!