我在元组数组中查找最大y值的方法导致了一个我无法理解的错误。
let a: [(x: Float, y: Float)]? = [(x:5,y:9),(x:1,y:4),(x:4,y:3),(x:2,y:5),(x:6,y:8)]
let maxY = a.map { $0.y }.max()
它会抛出一个错误:
答案 0 :(得分:1)
你可以这样做:
let maxY = a.map({ $0.y }).max()
在这里,您使用map
创建了另一个仅包含y
的数组,然后使用max()
查找这些y
的最大值。
你也可以这样做:
let maxY = a.max { $0.y < $1.y }?.y
这里你使用了max
向它传递一个闭包,这个闭包比较了数组值的y
属性,然后你得到了包含该元组的元组的y
最大。
正如@Allen Humphreys在评论中指出的那样,您也可以使用reduce
这样做:
let maxY = a.reduce(Int.min) { max($0, $1.y) }
在这里,您只将数组缩减为一个值,即最大值。
答案 1 :(得分:0)
感谢@Alen @matt和@Abdul的代码片段。
我在可选对象上调用max函数时犯了一个错误。
原始代码是,
var data: [(x: Float, y: Float)]?
data = [(x:5,y:9),(x:1,y:4),(x:4,y:3),(x:2,y:5),(x:6,y:8)]
let maxY = data.map({ $0.y }).max()
我意识到我没注意到“?”执行我编写的代码时,这个东西挂钩编译错误。
好吧,它应该是,
let maxY = data?.map({ $0.y }).max()