मेरे पास एक 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
लेकिन यह मुहावरेदार नहीं लगता। वहाँ एक सूची पर एक समारोह नक्शा करने के लिए एक अच्छा तरीका है, के रूप में आप जाते हैं / हटाने nils को छोड़कर?
filter_map, जो इसके लिए एकदम सही लगता है। सरणी को फिर से संसाधित करने की आवश्यकता को बचाता है, इसके बजाय इसे पहली बार वांछित के रूप में प्राप्त कर रहा है। अधिक जानकारी यहाँ।