Ich habe eine, map
die entweder einen Wert ändert oder auf Null setzt. Ich möchte dann die Null-Einträge aus der Liste entfernen. Die Liste muss nicht aufbewahrt werden.
Folgendes habe ich derzeit:
# 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]
Ich bin mir bewusst, dass ich einfach eine Schleife machen und bedingt in einem anderen Array wie diesem sammeln könnte:
new_items = []
items.each do |x|
x = transform(x)
new_items.append(x) unless x.nil?
end
items = new_items
Aber es scheint nicht so idiomatisch. Gibt es eine gute Möglichkeit, eine Funktion einer Liste zuzuordnen und dabei die Nullen zu entfernen / auszuschließen?
filter_map
, was dafür perfekt zu sein scheint. Spart die Notwendigkeit, das Array erneut zu verarbeiten, anstatt es beim ersten Mal wie gewünscht durchzuziehen. Mehr Infos hier.