arrays - 在 Swift 3 中比较字符串数组和字典

标签 arrays swift string dictionary

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

简而言之,单行过滤,没有 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)

关于arrays - 在 Swift 3 中比较字符串数组和字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44889263/

相关文章:

javascript - 为什么过滤器返回 [object Object]?

ios - 如何使用 Swift 中的协议(protocol)和委托(delegate)将变量从 UIViewController 传递回根导航 Controller

正在拆分的 Python 用户定义的异常字符串

ios - 自定义 UIView 重绘 View Controller

python - 基本的字符串和变量python

c# - isprefix 是否比在 C# 中比较两个字符串更昂贵?

java - 能否利用Dijkstra算法找到最快返回路由节点的方法?

java - 接受计算器程序的输入

c - 字符串数组中的单词条目

swift - 将 UInt8 数组转换为字符串