Arrays 将字符串数组转换为双精度数组,然后在Swift中计算和

Arrays 将字符串数组转换为双精度数组,然后在Swift中计算和,arrays,swift,parse-platform,Arrays,Swift,Parse Platform,我有一个字符串数组,我想将其转换为Double。然后我想把数组中的每一项加在一起,得到总和 这是我到目前为止的代码,在枚举数组之后,我在将所有数组添加到一起时遇到了问题 更新:Xcode 10.1•Swift 4.2.1或更高版本 let strings = ["1.9","2.7","3.1","4.5","5.0"] let doubles = strings.compactMap(Doub

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

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


更新: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) }

以下是对Swift 2.0中问题第一部分的回答:

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

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

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)
只需
map
(迭代并转换数组中的每个值)将数组中的所有值映射为
Double
,然后
使用起始值
0
和闭包(在您的情况下,它只是一个操作符)
+
减少
所有
Double

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


只有代码的答案没有多大帮助。请包括一些解释!用Batter添加代码。不是图像。
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)
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"