如何计算NSDictionary的swift数组的值总和

时间:2017-01-16 20:46:20

标签: swift

我的词典包含NSDate作为键,Double作为值。我有一个这个字典的数组(快速数组)([NSDictionary]),我想计算字典的所有值的总和。

我尝试将其投放到Dictionary<NSDate, Double>(快捷方式)或NSArray<NSDictionary>,但我总是遇到错误。

有没有一种简单的方法来计算总和?

4 个答案:

答案 0 :(得分:3)

这是一种功能性方法:

let total = array.reduce(0) { (sum, dict) in sum + (dict.allValues as! [Double]).reduce(0, +) }

这两次使用reduce。内部reduce汇总了单个字典的值,外部reduce汇总了所有字典的总数。

随着可读性的降低,您可以使用默认参数名$0$1来实现更紧凑的等式:

let total = array.reduce(0) { $0 + ($1.allValues as! [Double]).reduce(0, +) }

答案 1 :(得分:0)

var sum : Double = 0

for dict in array {
    for (_, value) in dict {
        sum += value as! Double
    }
}

print(sum)

我不确定您的数据是如何设置的,但应该这样做

答案 2 :(得分:0)

let sum = array.reduce(0.0) { (result : Double, entry : [Date : Double]) -> Double in
    return result + entry.reduce(0.0) { $0 + $1.1 }
}
print(sum)

答案 3 :(得分:0)

鉴于此

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let date0 = dateFormatter.date(from: "2017-01-16")!
let date1 = dateFormatter.date(from: "2017-01-17")!
let date2 = dateFormatter.date(from: "2017-01-18")!

let dict0: NSDictionary = [date0: Double(1), date1: Double(2)]
let dict1: NSDictionary = [date1: Double(3)]
let list: [NSDictionary] = [dict0, dict1]

您可以计算写入值的总和

let sum = list.flatMap { $0.allValues.map { $0 as! Double } }.reduce(0, +) // 6