web-dev-qa-db-fra.com

Supprimer les éléments en double du tableau dans Ruby

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?

300
Mithun Sasidharan
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.

673
Mithun Sasidharan

Vous pouvez également renvoyer l'intersection.

a = [1,1,2,3]
a & a

Cela supprimera également les doublons.

79
jaredsmith

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 }
41
maprihoda

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]
16
Lri

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]
16
Finks