代码之家  ›  专栏  ›  技术社区  ›  Pangu

如何在Swift中获得元组数组的最大双值?

  •  6
  • Pangu  · 技术社区  · 7 年前

    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 回复  |  直到 7 年前
        1
  •  4
  •   vadian    7 年前

    max 工程类似于 sort .你必须通过比较 $0 < $1 。结果是具有最大值的(可选)元组。

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

    documentation

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

        2
  •  3
  •   Titouan de Bailleul    7 年前

    您可以使用以下解决方案

    let max = myArray.max { (left, right) -> Bool in
        return left.1 < right.1
    }
    

    或者使用$语法

    myArray.max { $0.1 < $1.1 }
    
        3
  •  1
  •   roy    7 年前

    max . .

    let maxTuple = myArray.max{ $0.1 < $1.1 }!
    let maxDouble = maxTuple.1
    
        4
  •  0
  •   nayem    7 年前

    试试这个:

    myArray.max { (val1, val2) -> Bool in
        return val1.1 < val2.1
    }
    
        5
  •  0
  •   3stud1ant3    7 年前

    这段代码给出了给定数组的最大double值

    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)