J'ai un tableau Ruby qui contient des éléments en double.
array = [1,2,2,1,4,4,5,6,7,8,5,6]
Comment puis-je supprimer tous les éléments en double de ce tableau tout en conservant tous les éléments uniques sans utiliser de boucles for et d'itération?
ruby-on-rails
arrays
ruby
duplicates
Mithun Sasidharan
la source
la source
[{how: "are"}, {u:"doing"}, {how: "are"}].uniq => [{:how=>"are"}, {:u=>"doing"}]
.uniq!
il fait le travail sur l'objet luiVous pouvez renvoyer l'intersection.
Cela supprimera également les doublons.
la source
a | a
(union) ferait le même tour.Vous pouvez supprimer les éléments en double avec la méthode uniq:
Ce qui pourrait également être utile de savoir, c'est que
uniq
prend un bloc, donc si vous avez un tableau de clés:et vous voulez savoir quels sont les fichiers uniques, vous pouvez le découvrir avec:
la source
uniq
à ce tableau sans bloc retournerait la même valeur qu'avec votre bloc.Juste une autre alternative si quelqu'un s'en soucie.
Vous pouvez également utiliser la
to_set
méthode d'un tableau qui convertit le tableau en un ensemble et, par définition, les éléments d'ensemble sont uniques.la source
to_set
allouera 4 objets, tout enuniq
alloue un.Si quelqu'un cherchait un moyen de supprimer toutes les instances de valeurs répétées, voir " Comment puis-je extraire efficacement des éléments répétés dans un tableau Ruby? ".
la source
a = [1, 2, 2, 3] a.find_all { |x| a.count(x) == 1 } # [1, 3]
Juste pour donner un aperçu:
Ce qui, une fois exécuté, entraîne:
Remarque: ces résultats sont mauvais:
lri(SHORT_ARRAY) # => [3]
finks(SHORT_ARRAY) # => #<Set: {1, 2, 3}>
santosh_mohanty(SHORT_ARRAY) # => [1, 2, 3, 1]
la source
Essayez d'utiliser l'opérateur XOR, sans utiliser les fonctions intégrées:
Avec des fonctions intégrées:
la source
.sort!
plus une fonction intégrée?