【问题标题】:Swift - Convert values in array to doubles or floatsSwift - 将数组中的值转换为双精度或浮点数
【发布时间】:2015-11-23 01:02:12
【问题描述】:

我有一个数组,其值为字符串(但所有字符串都是 1.0、2.0 等值)。我正在尝试将这些字符串转换为双精度或浮点数,以便将它们加在一起。我如何快速做到这一点?

【问题讨论】:

    标签: ios arrays string swift double


    【解决方案1】:
    let x = ["1.0", "1.5", "2.0"]
    print(x.map {Double($0)!})
    

    【讨论】:

    • x.map {Double($0) ?? 0} 在展开时避免 nil ;)
    • 或使用compactMap
    【解决方案2】:

    更新:Xcode 8.3.2 • Swift 3.1

    extension Collection where Iterator.Element == String {
        var doubleArray: [Double] {
            return flatMap{ Double($0) }
        }
        var floatArray: [Float] {
            return flatMap{ Float($0) }
        }
    }
    

    用法:

    let strNumbersArray = ["1.5","2.3","3.7","4.5"]   // ["1.5", "2.3", "3.7", "4.5"]
    let doublesArray = strNumbersArray.doubleArray    // [1.5, 2.3, 3.7, 4.5]
    let floatsArray = strNumbersArray.floatArray      // [1.5, 2.3, 3.7, 4.5]
    let total = doublesArray.reduce(0, +)     // 12
    let average = total / Double(doublesArray.count)  // 3
    

    如果你有一个任意数组?您需要将所有字符串从 Optional Any 转换为 Double:

    extension Collection where Iterator.Element == Any? {
        var doubleArrayFromStrings: [Double] {
            return flatMap{ Double($0 as? String ?? "") }
        }
        var floatArrayFromStrings: [Float] {
            return flatMap{ Float($0 as? String ?? "") }
        }
    }
    

    用法:

    let strNumbersArray:[Any?] = ["1.5","2.3","3.7","4.5", nil]   // [{Some "1.5"}, {Some "2.3"}, {Some "3.7"}, {Some "4.5"}, nil]
    let doublesArray = strNumbersArray.doubleArrayFromStrings    // [1.5, 2.3, 3.7, 4.5]
    let floatsArray = strNumbersArray.floatArrayFromStrings      // [1.5, 2.3, 3.7, 4.5]
    let total = doublesArray.reduce(0, +)     // 12
    let average = total / Double(doublesArray.count)  // 3
    

    【讨论】:

    • 我收到一个错误:Type 'AnyObject?' does not conform to protocol 'StringType'
    • 此扩展适用于字符串数组。您可以编辑您的问题并添加原始输入源代码吗?
    • 这很奇怪。我正在从 parse 下载数组,其中的所有对象都应该是字符串:var newarray = [object.objectForKey("times")]
    • 你需要转换为 [String]
    • @JaganrajPalanivel 更新到 Swift 3.1 和 Any 数组而不是 AnyObject
    【解决方案3】:

    斯威夫特 5.1

    extension Collection where Iterator.Element == String {
        var convertToDouble: [Double] {
            return compactMap{ Double($0) }
        }
        var convertToFloat: [Float] {
            return compactMap{ Float($0) }
        }
    }
    
    

    使用示例

    let String_Array = ["1.5","2.3","3.7","4.5"]       // ["1.5", "2.3", "3.7", "4.5"]
    let Double_Array = String_Array.convertToDouble    // [1.5, 2.3, 3.7, 4.5]
    let Float_Array = String_Array.convertToFloat.     // [1.5, 2.3, 3.7, 4.5]
    
    

    或者你可以这样做

    let numArray = ["1.0","2.0","3.0"]
    let stringFromArray = numberArray[0]
    let floatFromString = Float(stringFromArray)
    let doubleFromString = Double(stringFromArray)
    
    

    【讨论】:

      【解决方案4】:

      如果你确定你的所有数组都是字符串,你可以直接将你的字符串转换成浮点数或双精度数。

      let numberArray:Array = ["1.0","2.0","3.0"]
      let stringFromArray = numberArray[0]
      let floatFromString = Float(stringFromArray)
      let doubleFromString = Double(stringFromArray)
      

      【讨论】:

        猜你喜欢
        • 2011-11-22
        • 2015-06-12
        • 1970-01-01
        • 2018-04-26
        • 1970-01-01
        • 1970-01-01
        • 2014-01-30
        • 2018-08-09
        • 1970-01-01
        相关资源
        最近更新 更多