2017-07-03 59 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) }