我有这门课:

class ValueTimestamp {
  let value: Double
  let timestamp : Double
  init(value:Double, timestamp:Double) {
    self.value = value
    self.timestamp = timestamp
  }
}

然后我有一个这个类的对象数组。
现在我要扫描这个数组并找到具有最小值的ValueTimestamp类的对象。
假设数组有3个元素
element1(值=12,时间戳=2)
element2(值=5,时间戳=3)
element3(值=10,时间戳=4)

let myArray = [element1, element2, element3]

现在我想找到具有最小值的元素。
我想这会管用的
let min = myArray.map({$0.value}).min()
let minIndex = myArray.firstIndex(of: min)

但是第二行给了我一个错误
调用中的参数标签不正确(具有“of:”,应为“where:”)
有什么想法吗?

最佳答案

firstIndex(of: )不起作用,因为我认为您的类不符合Equatable
这就是为什么你希望在这个案例中使用firstIndex(where:)
同样,在下面的代码中,您没有得到对象,而是得到值,因此minDouble?而不是ValueTimeStamp?的类型:

let min = myArray.map({$0.value}).min()

使用where可以使用以下命令获取最小索引:
let minIndex = myArray.firstIndex(where: {$0.value == min})

参考文献:
https://developer.apple.com/documentation/swift/array/2994720-firstindex
https://developer.apple.com/documentation/swift/array/2994722-firstindex

09-26 13:32