[英]Swift 3 - Filter and sort array of dictionaries, by dictionary values, with values from array
我試圖以一種優雅的方式實現以下行為:
按
userIds
的id重新排序users
,並過濾掉id不在userIds
所有user
試圖以“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 })!] })
產生重新排序和過濾的預期結果。 但是當userIds
包含一個不屬於users
(例如4
) user
的id時代碼崩潰,這要歸功於強制解包。
我失去了什么讓它在沒有崩潰的情況下工作?
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)
以下作品:
let m = userIds.flatMap { userId in users.filter { $0["id"] == userId }.first }
它filter
s以找到正確的成員,然后“平坦”生成的數組,刪除空的選項。
當您擁有dublicate 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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.