3 votes

Comment filtrer les éléments d'un tableau ?

Exemple de tableau :

x = [1,2,3,4,2,2,2]

Filtre :

y = [2,4,7,9]

Sortie souhaitée :

result = [2,4,2,2,2]

J'ai essayé :

result = (x & y)

mais cela me donne [4,2] .

Comment je fais : result = [2,4,2,2,2] ?

4voto

pguardiario Points 19925

Pourquoi pas :

x - (x - y)
#=> [2, 4, 2, 2, 2]

2voto

Phrogz Points 112337

1-2 lignes plus longues que la réponse de @Mark, mais plus efficaces (si les deux tableaux sont grands) :

require 'set'
keep   = Set[2,4,7,9] # or Set.new(some_large_array)
result = x.select{ |n| keep.include?(n) } #=> [2, 4, 2, 2, 2]

Le problème avec l'écriture...

x.select{ |i| y.include?(i) }

...est que c'est O(x*y) le nombre d'éléments dans chaque tableau. Avec 100 éléments dans chaque tableau, vous effectuez 10 000 opérations dans le pire des cas ; ma réponse ne fait que 100 opérations.

1voto

Mark Reed Points 23817

Premièrement, ne mettez pas de majuscules aux variables en Ruby. La majuscule est réservée aux constantes, comme les noms de classes.

result = x.select {|i| y.include? i}

Notez que select est également appelé find_all et est le filtre positif de ruby ; le filtre négatif est reject . Entre les accolades, vous pouvez mettre le code que vous voulez ; il sera exécuté une fois pour chaque élément de x (l'élément est passé en argument et devient i ), et le résultat de l'appel complet comprendra tous les éléments pour lesquels le bloc renvoie une valeur vraie.

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