我的词典包含NSDate
作为键,Double
作为值。我有一个这个字典的数组(快速数组)([NSDictionary]
),我想计算字典的所有值的总和。
我尝试将其投放到Dictionary<NSDate, Double>
(快捷方式)或NSArray<NSDictionary>
,但我总是遇到错误。
有没有一种简单的方法来计算总和?
答案 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