gpt4 book ai didi

arrays - Swift:如何获得两个结构数组之间的差异

转载 作者:搜寻专家 更新时间:2023-11-01 05:57:23 25 4
gpt4 key购买 nike

我有两个自定义结构数组...

struct CarStruct {
var name : String?
var speed : Int?
}

var allCarsArr = [CarStruct]() // should contain a lot of CarStructs
var newCarsArr = [CarStruct]() // contains only a few

我想将 newCarsArr 添加到 allCarsArr

但在此之前,我需要证明 newCarsArr 不包含 allCarsArr 中已有的结构。

那么如何从 newCarsArr 中获取不在 allCarsArr 中的所有 structs 呢?

最佳答案

您应该将 Equatable 协议(protocol)作为扩展添加到您的类中。这是一篇解释它的优秀文章:

Every Value Type Should Be Equatable

然后您可以将两个数组添加到一个 Set 中,它自然会排除重复项。您还需要遵守 Hashable 以便将值放入 Set 中,但是有一个简单的技巧可以将值转换为字符串并获取它的 hashValue

struct CarStruct {
var name : String?
var speed : Int?
}

extension CarStruct: Hashable, Equatable {
// For Hashable
var hashValue:Int { return "\(self.name),\(self.speed)".hashValue }
}

// For Equatable
func ==(lhs:CarStruct, rhs:CarStruct) -> Bool {
return lhs.name == rhs.name && lhs.speed == rhs.speed
}

var allCarsArr = [CarStruct]() // should contain a lot of CarStructs
let newCarsArr = [CarStruct]() // contains only a few

allCarsArr = Array(Set<CarStruct>(allCarsArr).union(newCarsArr))

关于arrays - Swift:如何获得两个结构数组之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36248130/

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