我试图以优雅的方式实现以下行为:
按
中的所有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
)时代码崩溃。
我错过了什么让它在没有崩溃的情况下工作?
答案 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)