map
値を変更するか、nilに設定するを持っています。次に、リストからnilエントリを削除します。リストを保持する必要はありません。
これは私が現在持っているものです:
# 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]
私はループを実行して、次のような別の配列に条件付きで収集できることを知っています:
new_items = []
items.each do |x|
x = transform(x)
new_items.append(x) unless x.nil?
end
items = new_items
しかし、それはそれほど慣用的ではないようです。リストに関数をマップして、nilを削除/除外する良い方法はありますか?
filter_map
、これはこれに最適なようです。配列を再処理する必要をなくし、最初に必要に応じて配列を取得します。詳細はこちら。