gpt4 book ai didi

ios - 根据唯一属性 ID 快速添加或更新项目数组

转载 作者:行者123 更新时间:2023-11-28 10:06:15 25 4
gpt4 key购买 nike

我正在寻找可以将对象数组(对象是类而不是结构)添加到现有数组中的有效算法。要求是如果现有数组包含具有相同 id 的对象,该函数将更新该对象(根据更新的对象更改现有对象的属性)。如果 object.id 不包含在现有数组中,该函数将简单地将该对象添加到现有数组中。返回数组由新对象和更新对象组成。

如果 object.id 是新的,基本上只添加对象。如果已包含 object.id,它将更新对象的属性

下面我试试

func addPhotoArray(_ photos: [Photo], addedPhoto: [Photo]) -> [Photo]{
var resultArray = photos
let originalIds = photos.map{$0.id}

for photo in addedPhoto {
if !originalIds.contains(photo.id) {
resultArray.append(photo)
}
}
return resultArray
}

但我缺少更新要求。我该如何解决这个问题?

更新

用索引替换项目是一个选项。但不确定如果仅更改 1 或 2 个属性或根本没有更改是否有效。我也在考虑使用 Set。如何符合我们可以使用 union 函数的 hashable,如下所示

extension Photo {
static func union (left: [Photo],right: [Photo] ) -> [Photo]{
return Array(Set(left).union(Set(right)))
}

static func ==(lhs: Photo, rhs: Photo) -> Bool {
return lhs.id == rhs.id
}
}

最佳答案

我选择不使用 id 数组,而是使用 firstIndex 来查找重复的照片(我假设原始数组中的所有照片都是唯一的),如果找到一个,我将其替换为新的版本

func addPhotoArray(_ photos: [Photo], addedPhoto: [Photo]) -> [Photo]{
var resultArray = photos

for photo in addedPhoto {
if let photoIndex = resultArray.firstIndex(where: { $0.id == photo.id}) {
resultArray[photoIndex] = photo
} else {
resultArray.append(photo)
}
}
return resultArray
}

关于ios - 根据唯一属性 ID 快速添加或更新项目数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52830301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com