我有一个数据点数组,具有x和y值:

struct DataPoint: Identifiable, Hashable {
    let x: Double
    let y: Double
    
    var id: String { String(x/y) }
}

我正在try 获得与最大y值相对应的x值.我正在使用此命令,但有时会出现超出范围的错误:

let dataPoints: [DataPoint] = await calculateDataPoints() 

if let index = dataPoints.indices.max(by: { dataPoints[$0].y < dataPoints[$1].y }) {
    return dataPoints[index].x
}

calculateDataPoints()是一个异步函数.

也许还有其他方法可以做到这一点呢?

推荐答案

我认为您应该在找到最大值之前首先判断dataPoints数组是否为空,在我的场景中,如果dataPoints数组为空,max(by:)函数将返回nil,因此if let块内的代码将不会执行.

如果希望在dataPoints数组为空时返回默认值0.0:

let dataPoints: [DataPoint] = await calculateDataPoints()

if let maxDataPoint = dataPoints.max(by: { $0.y < $1.y }) {
    return maxDataPoint.x
} else {
    return 0.0
}

Swift相关问答推荐

.onReceive NSWindow.CloseNotify是否会为App中的每个窗口调用?

SWIFT:使字典数组值可变

在不传递参数的情况下使用Init方法?

可以';t在标记为@Observable的类上使用属性包装

';NSInternal不一致异常';,原因:';可见导航栏Xcode 15.0 Crash请求布局

如何使用可搜索在搜索栏中搜索包括>或<?

无论玩家移动到视图内的哪个位置,如何使用 SpriteKit 让敌人向玩家emits 子弹?

如何在visionOS中将模型锚定在用户头部上方?

为什么 XUIView 中的 Binding 看不到更新后的值?

从 Obj-C 函数返回 swift 类的不兼容指针类型

带有可选字符串作为键路径的 SwiftUI iOS16 表

列表不显示信息

从文字创建数组时的 Swift 宏

如何在一个视图控制器中创建具有相同行为的多个集合视图?

当使用 CGFloat 而不是数字文字时,为什么 node 的位置会发生变化?

SwiftUI View Builder 参数无法更改状态

无法增加系统镜像的大小

RealityKit – 无法加载 ARView(发现为零)

更改日期 Select 器的文本 colored颜色

swift 3 如何获取明天和昨天的日期(注意特殊情况)新月或新年