ฉันมีสิ่งmap
ใดที่เปลี่ยนค่าหรือตั้งค่าเป็นศูนย์ ฉันต้องการลบรายการที่ไม่มีจากรายการ รายการไม่จำเป็นต้องถูกเก็บไว้
นี่คือสิ่งที่ฉันมีในปัจจุบัน:
# 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
แต่ดูเหมือนว่ามันจะไม่สำนวน มีวิธีที่ดีในการแมปฟังก์ชั่นเหนือรายการโดยเอาออก / ไม่รวมนิลส์หรือเปล่า?
filter_map
ซึ่งดูเหมือนว่าจะเหมาะสำหรับการนี้ บันทึกความต้องการในการประมวลผลอาร์เรย์อีกครั้งแทนที่จะทำให้ได้รับตามต้องการในครั้งแรก ข้อมูลเพิ่มเติมที่นี่