繁体   English   中英

在Swift 3中将字符串数组与字典进行比较

[英]Compare String Array with Dictionary in Swift 3

我有字符串数组, 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"])

现在从responseArray这是我的字典,我想要所有与filterClassName提到的className匹配的值

因此,我应该以数组形式输出:

[“ id”:1,“ name”:“ Prateek”,“ className”:“ A”],[“ id”:1,“ name”:“ rateek”,“ className”:“ B”],[“ id“:5,”名称“:” 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)) }

简而言之,单行过滤,没有for循环,因为我讨厌它们!

您已经很接近了,但是反过来:

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

但是,正如Hamish在评论中提到的那样,使用自定义结构更有效。

您的代码:

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)

您必须检查filterClassName数组是否包含类名称。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM