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 for-boucles et d'itération?
array = array.uniq
La méthode uniq supprime tous les éléments en double et conserve tous les éléments uniques du tableau.
Une des nombreuses beautés de la langueRuby.
Vous pouvez également renvoyer l'intersection.
a = [1,1,2,3]
a & a
Cela supprimera également les doublons.
Vous pouvez supprimer les éléments en double avec la méthode uniq:
array.uniq # => [1, 2, 4, 5, 6, 7, 8]
Ce qui pourrait aussi être utile à savoir, c’est que la méthode uniq prend un bloc, alors par exemple si vous avez un tableau de clés comme celui-ci:
["bucket1:file1", "bucket2:file1", "bucket3:file2", "bucket4:file2"]
et vous voulez savoir quels sont les fichiers uniques, vous pouvez le trouver avec:
a.uniq { |f| f[/\d+$/] }.map { |p| p.split(':').last }
Si quelqu'un cherchait un moyen de supprimer toutes les occurrences de valeurs répétées, voir cette question .
a = [1, 2, 2, 3]
counts = Hash.new(0)
a.each { |v| counts[v] += 1 }
p counts.select { |v, count| count == 1 }.keys # [1, 3]
Juste une autre alternative si quelqu'un s'en soucie.
Vous pouvez également utiliser la méthode to_set
d'un tableau qui convertit le tableau en un ensemble. Par définition, les éléments de l'ensemble sont uniques.
[1,2,3,4,5,5,5,6].to_set => [1,2,3,4,5,6]