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

Her*_*eis 4 arrays dictionary swift

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

users按id 重新排序userIds并过滤掉userid 不在的所有suserIds

试图以"Swifty方式"来做:

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 })!] })
Run Code Online (Sandbox Code Playgroud)

产生重新排序和过滤的预期结果.但是当代码userIds包含一个不属于userin users(例如4)的id 时代码崩溃,这要归功于force-unwrap.

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

Ale*_*bin 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)
Run Code Online (Sandbox Code Playgroud)


luk*_*302 5

以下作品:

let m = userIds.flatMap { userId in users.filter { $0["id"] == userId }.first }
Run Code Online (Sandbox Code Playgroud)

filter是找到正确的成员然后"平坦"生成的数组,删除空的选项.