gpt4 book ai didi

ios - 根据属性比较并返回不同的 swift 数组对象

转载 作者:行者123 更新时间:2023-11-28 12:40:49 25 4
gpt4 key购买 nike

我有一组具有某些属性的对象。

例如:餐厅{名称、纬度、经度、地址}

我想根据特定属性比较每个对象并返回不同对象的列表。

例如:

Array = [R1, R2, R3, R4, R5]

比方说,餐厅 R4 和 R5 离得更近,并且它们具有相同的纬度和经度。

我需要比较过滤数组

($0.latitude == $1.latitude and $0.longitude == $1.longitude) 四舍五入到小数点后三位

这样最终的结果就会有下面的项目[R1, R2, R3, R4]

最佳答案

正如@kandelvijaya 所说,如果您想/必须成对比较元素,我不确定您是否可以比二次时间做得更好(这在很多情况下都很好)。

这是一个通用的 O(n) 备选方案。两件事:

  • 不是直接比较两个元素,而是提供一个 key 代表您要比较的属性。
  • 这个键需要是可散列的(许多标准类型都是)。

.

extension Sequence {
typealias Element = Iterator.Element

func uniqued<Key: Hashable>(by key: (Element) -> (Key)) -> [Element] {
var seen = Set<Key>()
return filter {
seen.update(with: key($0)) == nil
}
}
}

用法:

let numbers = [1, 1, 1, 2, 2, 3, 1, 2, 3]
let uniqueByValue = numbers.uniqued { $0 }

let strings = ["a", "b", "aa", "bb", "ccc", "dddd"]
let uniqueByLength = strings.uniqued { $0.characters.count }

在您的情况下,这可能是:

let restaurantes = [R1, R2, R3, R4, R5]
let uniques = restaurants.uniqued {
let roundedLat = ...
let roundedLong = ...
return "\(roundedLat), \(roundedLong)"
}

关于ios - 根据属性比较并返回不同的 swift 数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39446686/

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