簡體   English   中英

Swift 3 - 按字典值對數組中的值過濾和排序字典數組

[英]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 (例如4user的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM