tôi có một map
trong đó thay đổi một giá trị hoặc đặt nó thành không. Sau đó tôi muốn xóa các mục không trong danh sách. Danh sách này không cần phải lưu giữ.
Đây là những gì tôi hiện có:
# 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]
Tôi biết tôi chỉ có thể thực hiện một vòng lặp và thu thập có điều kiện trong một mảng khác như thế này:
new_items = []
items.each do |x|
x = transform(x)
new_items.append(x) unless x.nil?
end
items = new_items
Nhưng nó không có vẻ thành ngữ. Có một cách hay để ánh xạ một chức năng qua một danh sách, loại bỏ / loại trừ các nils khi bạn đi không?
filter_map
, dường như là hoàn hảo cho việc này. Tiết kiệm nhu cầu xử lý lại mảng, thay vào đó là đạt được như mong muốn lần đầu tiên. Thêm thông tin ở đây.