इसलिए मुझे ऑब्जेक्ट में निहित एक सरणी द्वारा वस्तुओं की एक सरणी को फ़िल्टर करने की आवश्यकता है

वस्तु इस तरह दिखती है

class thing {

let list = [stuff, stuff, stuff, stuff]

}

class stuff {

var name = "ugly"

}

सरणी इस तरह दिखती है

thingArray = [thing, thing, thing, thing]

और मेरा कोड अब तक इस तरह दिखता है

newArray = thingArray.filter { receipt in

return thing.thingArray.lowercaseString.containsString(searchText.lowercaseString)
        }

तो मेरी समस्या यह है कि मुझे यह फ़ंक्शन काम करने के लिए नहीं मिल सकता है और मुझे वास्तव में ऑब्जेक्ट के अंदर मौजूद सरणी द्वारा ऑब्जेक्ट्स की इस सरणी को फ़िल्टर करने का एक तरीका है। किसी भी मदद की निश्चित रूप से सराहना की जाती है।

अनुलेख मैंने अभी इसका कोई फायदा नहीं हुआ है:

test = thingArray.filter {$0.list.filter {$0.name.lowercaseString.containsString(searchText.lowercaseString) == true}}
0
WikipediaBrown 20 सितंबर 2016, 23:34

1 उत्तर

सबसे बढ़िया उत्तर

अगर मैं सही ढंग से समझूं, तो आपकी समस्या को कुछ इस तरह से हल किया जा सकता है:

class thing {

init(list: [String]) {
    self.list = list
}

var list: [String]

}

let thingArray = [thing(list: ["one", "two", "three"]), thing(list: ["uno", "due", "tre"]), thing(list: ["uno", "dos", "tres"])]

let searchString = "uno"

let result = thingArray.filter {
    $0.list.contains(searchString)
}

//it will print "uno", "due", "tre"
result.first?.list
2
matsoftware 20 सितंबर 2016, 23:56
यदि आप खोज मामले को असंवेदनशील बनाना चाहते हैं, तो आप यह कर सकते हैं: परिणाम = बातअरे.फ़िल्टर { ($0.list.filter {$0.lowercased() == searchString.lowercased() }.first != nil)}
 – 
matsoftware
21 सितंबर 2016, 00:02
ध्यान दें कि यदि प्रदर्शन एक समस्या है, तो आप Array के बजाय Set का उपयोग करके इसे तेज कर सकते हैं
 – 
Alexander
22 सितंबर 2016, 04:31