映射元组数组会导致类型的奇怪错误

时间:2017-08-23 19:41:46

标签: swift

我在元组数组中查找最大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()

它会抛出一个错误:

error

2 个答案:

答案 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()