J'ai un map
qui modifie une valeur ou la définit à zéro. Je souhaite ensuite supprimer les entrées nil de la liste. La liste n'a pas besoin d'être conservée.
Voici ce que j'ai actuellement:
# A simple example function, which returns a value or nil
def transform(n)
rand > 0.5 ? n * 10 : nil }
end
items.map! { |x| transform(x) } # [1, 2, 3, 4, 5] => [10, nil, 30, 40, nil]
items.reject! { |x| x.nil? } # [10, nil, 30, 40, nil] => [10, 30, 40]
Je suis conscient que je pourrais simplement faire une boucle et collecter conditionnellement dans un autre tableau comme celui-ci:
new_items = []
items.each do |x|
x = transform(x)
new_items.append(x) unless x.nil?
end
items = new_items
Mais cela ne semble pas si idiomatique. Existe-t-il un bon moyen de mapper une fonction sur une liste, en supprimant / excluant les nils au fur et à mesure?
filter_map
, ce qui semble être parfait pour cela. Enregistre le besoin de retraiter la baie, au lieu de la récupérer comme souhaité pour la première fois. Plus d'infos ici.