Eu tenho um map
que altera um valor ou define como nulo. Desejo então remover as entradas nulas da lista. A lista não precisa ser mantida.
Isto é o que eu tenho atualmente:
# 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]
Estou ciente de que eu poderia fazer um loop e coletar condicionalmente em outra matriz como esta:
new_items = []
items.each do |x|
x = transform(x)
new_items.append(x) unless x.nil?
end
items = new_items
Mas não parece tão idiomático. Existe uma boa maneira de mapear uma função em uma lista, removendo / excluindo os nils à medida que avança?
filter_map
, o que parece ser perfeito para isso. Economiza a necessidade de reprocessar a matriz, obtendo-a como desejado na primeira vez. Mais informações aqui.