2017-07-03 60 views
0

我有字符串數組let filterClassName = ["A","B"]在斯威夫特與詞典比較字符串數組3

現在我有字典,它看起來像:

var responseArray: [[String: Any]] = [] 

responseArray.append(["id": 1,"name": "Prateek", "className": "A"]) 
responseArray.append(["id": 1,"name": "rateek", "className": "B"]) 
responseArray.append(["id": 3,"name": "ateek", "className": "C"]) 
responseArray.append(["id": 4,"name": "teek", "className": "D"]) 
responseArray.append(["id": 5,"name": "eek", "className": "A"]) 
responseArray.append(["id": 6,"name": "ek", "className": "E"]) 

現在從responseArray這是我的字典我想要的我的類名相匹配的所有值在filterClassName

所以提到,我應該得到輸出數組:

[「id」:1,「name」:「Prateek」,「className」:「A」],[「id」:1,「name」: 「rateek」,「className」:「B」] ,[「id」:5,「name」:「eek」,「className」:「A」]

提前致謝!

這是我曾嘗試:

for value in filterClassName { 
    let cal = responseArray.filter { (($0["className"] as! String).contains(value)) } 
    for value in cal { 
     let valuesss = value 
     print ("valuesss" + String(describing: valuesss)) 
    } 
} 

我上面的回答是很基本的,但我想是這樣工作的:

let cal = responseArray.filter { (($0["className"] as! String).contains(filterClassName)) } 

在過濾和短單號線循環,因爲我恨他們!

+0

你有什麼試過的?我們不喜歡回答顯示沒有事先努力的問題。 – Alexander

+0

@Alexander:編輯! –

+0

這是字典的不恰當用法 - 您應該創建一個結構來代表響應。過濾然後變得更簡單。 – Hamish

回答

2

你是相當接近,但它是倒過來:

let filteredItems = responseArray.filter{ filterClassName.contains($0["className"] as! String) } 

然而 - 如麥高在評論中提到的 - 這是更有效地使用自定義的結構。

您的代碼:

let filterClassName = ["A","B"] 

var responseArray: [[String: Any]] = [] 

responseArray.append(["id": 1,"name": "Prateek", "className": "A"]) 
responseArray.append(["id": 1,"name": "rateek", "className": "B"]) 
responseArray.append(["id": 3,"name": "ateek", "className": "C"]) 
responseArray.append(["id": 4,"name": "teek", "className": "D"]) 
responseArray.append(["id": 5,"name": "eek", "className": "A"]) 
responseArray.append(["id": 6,"name": "ek", "className": "E"]) 

代碼添加:

struct Student { 
    let name, className : String 
    let id : Int 

    init?(dictionary: [String:Any]) { 
     guard let id = dictionary["id"] as? Int, 
      let name = dictionary["name"] as? String, 
      let className = dictionary["className"] as? String else { return nil } 
     self.id = id 
     self.name = name 
     self.className = className 
    } 
} 

let students = responseArray.flatMap { Student(dictionary:$0) } 
let filteredItems = students.filter{ filterClassName.contains($0.className) } 
print(filteredItems) 
+0

謝謝,這是我期待的! –

2

你必須檢查filterClassName陣列包含類名。

let filteredResponse = responseArray.filter { filterClassName.contains($0["className"] as! String) }