我覺得這必須在某些地方得到回答,但我已經搜索了幾天但沒有運氣。我在下面有一個例子。我有一組用戶,我需要將它們過濾為具有匹配 ID 屬性的用戶,我知道下面的代碼無法編譯.. 非常感謝您對此的任何幫助。
struct User {
var id: Int
var name: String
}
let userArray = [
User(id: 1, name: "A"),
User(id: 2, name: "B"),
User(id: 1, name: "C"),
User(id: 3, name: "D"),
]
let newArray = userArray.filter({ $0.id == $1.id })
// This is what i want to achieve
// newArray = [User(id: 1, name: "A"), User(id: 1, name: "C")]
在實際項目中,id是動態返回的。所以我只需要能夠檢查匹配的內容,而不知道 id 實際是什麼。
您的方法將不起作用,因為過濾器僅採用一個動態參數並且一次僅處理一項。因此它不能匹配兩個單獨的數組條目。
您的示例也沒有指定您希望如何處理具有多個不同 User.id 的情況。這個答案假設您希望能夠將它們分成單獨的數組。
Dictionary
有一個方便的初始化程序,可以為您完成大部分工作並根據定義的屬性進行分組。分組id
將為您提供一個字典,其中鍵是id
匹配User
記錄的數組。然後,您可以過濾字典以獲得一個字典,其中 any 有多個用戶id
。
let multiples = Dictionary(grouping: userArray, by: \.id).filter{$0.value.count > 1}
使用您的數據,您最終將得到一個字典:
[1: [User(id: 1, name: "A"), User(id: 1, name: "C")] ]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句