gpt4 book ai didi

swift - 在 Swift 的 CGPoints 数组中找到最左边位置的正确方法

转载 作者:行者123 更新时间:2023-11-28 09:46:35 24 4
gpt4 key购买 nike

图自Correct way to find max in an Array in Swift ,我正在尝试使用 reduce 找到 Swift 数组中最左边的位置。我原以为这会起作用:

var a = [CGPoint(x:1,y:1),CGPoint(x:2,y:2),CGPoint(x:0,y:0)]
var leftMost = a.reduce(CGPoint(x:CGFloat.max,y:CGFloat.max)) {min($0.x,$1.x)}

但是,我得到这个错误:

`Type 'CGPoint' does not conform to protocol 'Comparable'

当然,我不是在比较CGPoint,我是在比较点.x,它应该是一个CGFloat

想法?

最佳答案

该数组包含 CGPoint,而在 reduce 闭包中您试图返回一个 CGFloat - 您必须将其转换为一个 CGPoint 相反:

var leftMost = a.reduce(CGPoint(x:CGFloat.greatestFiniteMagnitude,y:CGFloat.greatestFiniteMagnitude)) {
CGPoint(x: min($0.x,$1.x), y: $0.y)
}.x

我知道,错误消息没有多大帮助:)

另一种实现相同结果的方法是先将点转换为 x 坐标,然后再归约:

var leftMost = a.map { $0.x }.reduce(CGFloat.greatestFiniteMagnitude) { min($0,$1) }

可能更容易阅读,尽管在性能方面可能更昂贵。但正如@MartinR 所建议的,它也可以简化为:

var leftMost = a.reduce(CGFloat.greatestFiniteMagnitude) { min($0, $1.x) }

关于swift - 在 Swift 的 CGPoints 数组中找到最左边位置的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28551120/

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