57 votes

Comparer deux tableaux en ignorant l'ordre des éléments dans Ruby

Je dois vérifier si deux tableaux contiennent les mêmes données dans n'importe quel ordre. En utilisant la compare , je voudrais faire :

 arr1 = [1,2,3,5,4]
arr2 = [3,4,2,1,5]
arr3 = [3,4,2,1,5,5]

arr1.compare(arr2) #true    
arr1.compare(arr3) #false

J'ai utilisé arr1.sort == arr2.sort , ce qui semble fonctionner, mais existe-t-il une meilleure façon de procéder ?

22voto

Gunchars Points 699

Si vous savez qu'il n'y a aucune répétition dans aucun des tableaux (c'est-à-dire que tous les éléments sont uniques ou que vous vous en fichez), l'utilisation des ensembles est simple et lisible :

 Set.new(array1) == Set.new(array2)

7voto

Vous pouvez réellement implémenter cette méthode #compare en patchant la classe Array comme ceci :

 class Array
  def compare(other)
    sort == other.sort
  end
end

Gardez à l'esprit que le patch de singe est rarement considéré comme une bonne pratique et que vous devez être prudent lorsque vous l'utilisez.

Il y a probablement une meilleure façon de le faire, mais c'est ce qui m'est venu à l'esprit. J'espère que ça aide!

3voto

Datt Points 605

Vous pouvez ouvrir la array et définir une méthode comme celle-ci.

 class Array
  def compare(comparate)
    to_set == comparate.to_set
  end
end

arr1.compare(arr2)
irb => true

OU utilisez simplement

 arr1.to_set == arr2.to_set
irb => true

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X