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]
?
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]
?
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.
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 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.