मैं एक छोटे से flatMap चारों ओर संदेह में हूँ से optionals को फिल्टर करने की तेज flatMap का उपयोग कैसे करें (स्विफ्ट 1.2 करने के लिए जोड़ा)एक सरणी
मैं कुछ वैकल्पिक प्रकार के उदाहरण के लिए एक सरणी है कहो
let possibles:[Int?] = [nil, 1, 2, 3, nil, nil, 4, 5]
स्विफ्ट 1.1 में मैं एक फिल्टर इस तरह एक नक्शे के द्वारा पीछा किया करते हैं:
let filtermap = possibles.filter({ return $0 != nil }).map({ return $0! })
// filtermap = [1, 2, 3, 4, 5]
मैं इस flatMap का उपयोग कर कुछ तरीके करने का प्रयास कर रहा है:
var flatmap1 = possibles.flatMap({
return $0 == nil ? [] : [$0!]
})
और
var flatmap2:[Int] = possibles.flatMap({
if let exercise = $0 { return [exercise] }
return []
})
मैं अंतिम अनुमोदन पसंद करता हूं ओच (क्योंकि मुझे मजबूर अनचाहे $0!
नहीं करना है ... मैं इनके लिए डरता हूं और उन्हें हर कीमत से बचता हूं) सिवाय इसके कि मुझे ऐरे प्रकार निर्दिष्ट करने की आवश्यकता है।
क्या कोई वैकल्पिक विकल्प है जो संदर्भ के प्रकार को आंकड़े करता है, लेकिन मजबूर अनचाहे नहीं है?
आप शायद मतलब स्विफ्ट 1.2 बनाम 1.1, वहाँ अभी तक कोई स्विफ्ट 1.3 (या मैं कुछ याद किया?) –
ओह, हाँ लगता है कि मैं मेरे दिमाग पर Xcode 6.3 था ... अद्यतन प्रश्न - धन्यवाद! – MathewS
हालांकि आप * नाइल्स को हटाने के लिए 'flatMap {$ 0}' का उपयोग कर सकते हैं, असली सवाल * आपको * चाहिए। यदि आप सावधान नहीं हैं, तो 'flatMap' बग का कारण बन सकता है, इसलिए मैं इसके बजाय [removeNils] (http://stackoverflow.com/a/38548106/35690) का उपयोग करने की सलाह देता हूं। – Senseful