Swift 3 - 按字典值对数组中的值过滤和排序字典数组

时间:2017-05-25 13:41:54

标签: arrays swift dictionary

我试图以优雅的方式实现以下行为:

  

dateFormater.locale = Locale.current中的ID重新排序users并过滤掉ID不在userIds

中的所有user

尝试以“Swifty方式”来做:

userIds

产生重新排序和过滤的预期结果。但是,由于强制解包,var users = [["id": 3, "stuff": 2, "test": 3], ["id": 2, "stuff": 2, "test": 3], ["id": 1, "stuff": 2, "test": 3]] var userIds = [1, 2, 3] userIds.map({ userId in users[users.index(where: { $0["id"] == userId })!] }) 包含userIds中不属于user的ID(例如users)时代码崩溃。

我错过了什么让它在没有崩溃的情况下工作?

3 个答案:

答案 0 :(得分:5)

var users = [
    ["id": 3, "stuff": 2, "test": 3],
    ["id": 2, "stuff": 2, "test": 3],
    ["id": 1, "stuff": 2, "test": 3]
]
var userIds = [2, 1, 3]

let filteredUsers = userIds.flatMap { id in
    users.first { $0["id"] == id }
}
print(filteredUsers)

答案 1 :(得分:5)

以下作品:

let m = userIds.flatMap { userId in users.filter { $0["id"] == userId }.first }

filter找到正确的成员,然后"展开结果数组,删除空的选项。

答案 2 :(得分:0)

当您使用 ID

时,此功能非常有用
var users = [["id": 1, "stuff": 4, "test": 5],["id": 3, "stuff": 2, "test": 3], ["id": 2, "stuff": 2, "test": 3], ["id": 1, "stuff": 2, "test": 3]]
    var userIds = [1, 2, 3]

        let filter = userIds.map {
            id in
            users.filter {
                $0["id"] == id
            }
        }

        print(filter)