【问题标题】:Max and min in an array of Float in SwiftSwift 中 Float 数组中的最大值和最小值
【发布时间】:2014-10-27 11:21:15
【问题描述】:

根据this answer,我们可以得到一个数组的最大值:

let nums = [1, 6, 3, 9, 4, 6];
let numMax = nums.reduce(Int.min, { max($0, $1) })

既然Float 没有minmax,我们怎么能对Array<Float> 做同样的事情?

let floats: Array<Float> = [2.45, 7.21, 1.35, 10.22, 2.45, 3];

【问题讨论】:

    标签: arrays swift


    【解决方案1】:

    这里给出的解决方案https://stackoverflow.com/a/24161004/1187415 适用于 对于所有可比较元素的序列,因此也适用于浮点数组:

    let floats: Array<Float> = [2.45, 7.21, 1.35, 10.22, 2.45, 3]
    let numMax = maxElement(floats)
    

    maxElement() 在 Swift 库中定义为

    /// Returns the maximum element in `elements`.  Requires:
    /// `elements` is non-empty. O(countElements(elements))
    func maxElement<R : SequenceType where R.Generator.Element : Comparable>(elements: R) -> R.Generator.Element
    

    【讨论】:

      【解决方案2】:

      只使用第一个数组元素作为初始值:

      let numMax = floats.reduce(floats[0], { max($0, $1) })
      

      当然你需要在做之前检查floats数组不为空。

      【讨论】:

        【解决方案3】:

        您可以使用-FLT_MAX,它返回Float 的最小幅度并用于相同目的

        let numMax = floats.reduce(-FLT_MAX, { max($0, $1) })
        

        对于Double 数组,您可以使用-DBL_MAX

        如果您想要Float 的最大幅度值,请使用FLT_MAXFLT_MIN 是最小可表示正浮点数。

        【讨论】:

        • 谢谢,我不知道FLT_MIN
        • 它应该是-FLT_MAX,对于Float.FLT_MIN 的最小幅度值给出了最小的指数值。所以我正在改变我的答案
        • 在哪里可以找到这些变量的文档?
        【解决方案4】:

        Swift 4 为Array&lt;Float&gt; 提供了一个.max() 方法。

        例子:

        let floats: Array<Float> = [2.45, 7.21, 1.35, 10.22, 2.45, 3]
        let max = floats.max()
        

        注意:max() 返回一个可选项,因此它有可能返回 nil。

        【讨论】:

          【解决方案5】:

          斯威夫特 2:

          var graphPoints:[Int] = [4, 2, 6, 4, 5, 8, 3]
          let maxValue = graphPoints.maxElement()
          

          【讨论】:

            【解决方案6】:

            在 Swift 中测试 >= 5.0

            let numbers = [12.9, 2.7, 3.7, 4, 5, 4, 12.8]
            print(numbers.max() ?? 0) // Output 12.9
            print(numbers.min() ?? 0) // Output 2.7
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-09-02
              • 1970-01-01
              • 1970-01-01
              • 2022-12-02
              • 2013-01-11
              • 2011-05-28
              • 1970-01-01
              相关资源
              最近更新 更多