在下面的代碼中,我怎樣才能在groupingDict.
struct User {
var name: String?
var drink: String?
}
let u1 = User(name: "Jack", drink: "Lemonade")
let u2 = User(name: "Jill", drink: "Iced Tea")
let list = [u1, u2]
var groupingDict = Dictionary(grouping: list, by: { $0.name })
print("groupingDict-original: ", groupingDict)
for (index, dict) in groupingDict.enumerated() {
if dict.key == "Jack" {
}
}
print("groupingDict-changed: ", groupingDict)
uj5u.com熱心網友回復:
訪問 Jack 的組,使用每個物件reduce(into:)并創建物件的副本,如果是“檸檬水”,則將飲料設定為“蘇打水”
if let jacksGroup = groupingDict["Jack"] {
let modified = jacksGroup.reduce(into: []) {
$0.append($1.drink == "Lemonade" ? User(name: $1.name, drink: "Soda") : $1)
}
groupingDict["Jack"] = modified
}
uj5u.com熱心網友回復:
我找到了另一種方法。您可以使用firstIndex(where: { }獲取專案的索引,更改屬性,創建專案的副本然后分配給字典值:
for (_, dict) in groupingDict.enumerated() {
if dict.key == "Jack" {
if var arr = groupingDict["Jack"] {
if let indexOfItem = arr.firstIndex(where: { $0.name == "Jack" }) {
arr[indexOfItem].drink = "Soda"
let copyOfItem = arr[indexOfItem]
groupingDict["Jack"] = [copyOfItem]
}
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/536717.html
標籤:数组迅速字典
