(1..4).collect do |x|
next if x == 3
x + 1
end # => [2, 3, nil, 5]
# desired => [2, 3, 5]
तो next
के लिए स्थिति उत्पन्न होने पर एकत्रित करते हैं, collect
सरणी में nil
डालता है, जबकि मैं क्या करने की कोशिश कर रहा हूँ लौटे सरणी में कोई तत्व डाल दिया जाता है, तो शर्त है मिला। क्या यह लौटा सरणी पर delete_if { |x| x == nil }
पर कॉल किए बिना संभव है?से अधिक जाएं Enumerable # में यात्रा
(रूबी 1.8.7 का उपयोग करना; मेरी कोड अंश भारी पृथक है)
सुंदर कोड। यह मेरी तुलना में एक बेहतर समाधान है। – Benson
यह सबसे धीमा उत्तर है (हालांकि बहुत अधिक नहीं), लेकिन निश्चित रूप से सबसे साफ है। मेरी इच्छा है कि 'संग्रह' के साथ ऐसा करने का कोई तरीका था, क्योंकि मुझे उम्मीद है कि 'अगली' को "कुछ भी नहीं" (उर्फ 'शून्य ') के बजाय' बिल्कुल 'कुछ नहीं लौटाएगा। –
यदि यह किसी अन्य दृष्टिकोण से धीमा है, तो रूबी का ऑप्टिमाइज़र कुछ कामों का उपयोग कर सकता है जो आपको नहीं लगता? – Shannon