gpt4 book ai didi

ios - 检查 Swift 数组上的重复属性

转载 作者:搜寻专家 更新时间:2023-11-01 06:36:46 27 4
gpt4 key购买 nike

我有一个名为 Place 的自定义类,它具有 3 个属性:

  • 姓名(字符串)
  • 类别(字符串)
  • 地理点(CLLocationCoordinate2D)

我有一个类型为 [Place] 的数组,其中包含 100 个对象,我想检查 GeoPoint 属性(仅此一个)是否有重复项。

如何检查自定义对象数组中特定属性的重复项?

谢谢!

最佳答案

虽然接受的答案很好,但我还是想凑钱。

还有两种方法可以实现您想要的,它们都受益于 SDK 提供的功能。

1 - 使用 Set 作为评论中提到的 Tj3n。为此,您需要使 Place 符合 Hashable 协议(protocol)。

class Place : Hashable {
var name = ""
var category = ""
var geoPoint: CLLocationCoordinate2D = CLLocationCoordinate2D()

var hashValue: Int {
get {
return geoPoint.longitude.hashValue &+ geoPoint.latitude.hashValue
}
}
}

func ==(lhs: Place, rhs: Place) -> Bool {
return lhs.geoPoint.latitude == rhs.geoPoint.latitude && lhs.geoPoint.longitude == rhs.geoPoint.longitude
}

hashValue 中的 &+ 运算符表示“添加,并且不会在溢出时崩溃”。使用它尽可能简单 - let set = Set(yourArrayOfPlaces) - set 将只包含唯一的,关于 geoPoint,地点。

2 - 使用 KVC。虽然这更像是一个 Objective-C 世界,但我发现它是一个有用的工具。为此,您需要使 Place 继承自 NSObject。然后获取一系列独特的地方可以减少到这一行:

let uniquePlaces = (yourPlacesArray as NSArray).value(forKeyPath: "@distinctUnionOfObjects.geoPoint")

关于ios - 检查 Swift 数组上的重复属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40649413/

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