【问题标题】:Converting Array Of String to Double and then calculating the sum in Swift将字符串数组转换为双精度然后在 Swift 中计算总和
【发布时间】:2015-09-03 03:48:59
【问题描述】:

我有一个字符串数组,我想将其转换为 Double。然后我想将数组中的每个项目加在一起并得到总和。

到目前为止,这是我的代码,在枚举数组后,我遇到了将所有这些添加在一起的问题。

【问题讨论】:

  • 电池添加代码。不是图片。

标签: arrays swift parse-platform


【解决方案1】:

更新:Xcode 10.1 • Swift 4.2.1 或更高版本

let strings = ["1.9","2.7","3.1","4.5","5.0"]
let doubles = strings.compactMap(Double.init)
let sum = doubles.reduce(0, +)

print(sum) // 17.2

如果不需要中介收款

let sum = strings.reduce(0) { $0 + (Double($1) ?? .zero) }

【讨论】:

  • 纯代码答案不是很有帮助。请提供一些解释!
【解决方案2】:

只需map(迭代并转换数组中的每个值)数组中的所有值都为Double,然后reduce所有Double值,起始值为0和闭包(在您的情况下,它只是一个运算符)+.

reduce 通过递归应用提供的闭包,将元素集合缩小为单个值。

let stringDoubles = ["2.9","3.1","1.7","9.5","5.6"]
let sum = stringDoubles.map { Double($0)! }.reduce(0, combine: +)
print(sum) // "22.8". If start value was, for example, 10, print(sum) => "32.8"

【讨论】:

    【解决方案3】:

    遍历数组, 对于每个字符串,使用以下命令将字符串转换为双精度:

    Double(string:String)
    

    然后将每个添加到计数中

    var strings:[String] = ["1.3", "1", "8", "5", "bad number"]
    
    var tally = 0.0
    for eachString in strings{
        // Convert each string to Double
    
        if let num = Double(eachString) { //Double(String) returns an optional.
            tally += num
        } else {
            print("Error converting to Double")
        }
        // Another way to convert if you don't need error handling 
        // NSString.doubleValue will just return 0.0 on a bad string.      
        // let num=(eachString as NSString).doubleValue
        // tally += num
    
    }
    print(tally)
    

    【讨论】:

      【解决方案4】:

      这是您在 Swift 2.0 中问题的第一部分的答案:

      我有一个字符串数组,我想将其转换为 Double。然后我想将数组中的每个项目加在一起并得到总和。

      let myStrings  = ["2", "3","5.6", "4", "6"]
      
      let doubles  = myStrings.map { (s : String) -> Double in
        if let d = Double(s){
          return d
        }
        return 0.0
      }
      
      let sum = doubles.reduce(0.0, combine: {(sum: Double, item:Double) ->Double in
                return sum + item
      })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-02
        • 1970-01-01
        • 1970-01-01
        • 2016-10-31
        • 2014-07-22
        • 2014-07-24
        • 2015-10-24
        相关资源
        最近更新 更多