如何在Swift中获取元组数组的最大Double值?

6

目前我有一个元组数组定义为var myArray = [(Date, Double)]()

myArray的输出可能看起来像这样:

[(2016-08-30 07:00:00 +0000, 1.0), (2016-09-30 07:00:00 +0000, 0.050000000000000003), 
(2016-10-30 07:00:00 +0000, 20.0), (2017-06-30 07:00:00 +0000, 6.0), 
(2017-07-30 07:00:00 +0000, 5.0)]

我试图从元组数组中获取最大的Double值,但不确定如何进行操作。

我看到有一个函数:

myArray.max { (<#(Date, Double)#>, <#(Date, Double)#>) -> Bool in 

}

然而,我不确定如何使用它,如果那是正确的函数使用方法的话?

有人能指点一下我吗?

5个回答

4

max的使用方式类似于sort。您需要传递比较函数$0 < $1。结果是(可选的)具有最大值的元组。

if let maxItem = myArray.max(by: {$0.1 < $1.1 }) {
    let maxDouble = maxItem.1
}

再次强烈建议不要使用元组作为数据源。

根据文档

如果您的数据结构可能会持续存在于临时范围之外,请将其建模为类或结构,而不是元组。


3
您可以使用以下解决方案。
let max = myArray.max { (left, right) -> Bool in
    return left.1 < right.1
}

或者使用 $ 符号

myArray.max { $0.1 < $1.1 }

1
max函数中添加一个闭包。
let maxTuple = myArray.max{ $0.1 < $1.1 }!
let maxDouble = maxTuple.1

0

试试这个:

myArray.max { (val1, val2) -> Bool in
    return val1.1 < val2.1
}

0

这段代码从给定的数组中返回最大的双精度数

var myArray = [(2016-08-30, 1.0), (2016-09-30, 0.050000000000000003),
 (2016-10-30, 20.0), (2017-06-30, 6.0),
 (2017-07-30, 5.0)]
// Get maximum element

var max = myArray.max {
    $0.1 < $1.1
}

print(max!.1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接