iOS Swift:如何计算密钥对字典中每个值的总和并将其存储在单独的字典中?
目前我有一个字典数组,定义如下:iOS Swift:如何计算密钥对字典中每个值的总和并将其存储在单独的字典中?,ios,arrays,swift,dictionary,Ios,Arrays,Swift,Dictionary,目前我有一个字典数组,定义如下: var dateDouble_ARRAY = [Date : [Double] ]() dateDouble_ARRAY = [2017-08-06 07:00:00 +0000: [11.880000000000001, 3.0], 2013-08-08 07:00:00 +0000: [5.0], 2016-08-01 07:00:00 +0000: [6.0], 2017-08-09 07:00:00 +0000: [6.0
var dateDouble_ARRAY = [Date : [Double] ]()
dateDouble_ARRAY = [2017-08-06 07:00:00 +0000: [11.880000000000001, 3.0],
2013-08-08 07:00:00 +0000: [5.0],
2016-08-01 07:00:00 +0000: [6.0],
2017-08-09 07:00:00 +0000: [6.0],
2013-08-02 07:00:00 +0000: [5.0],
2012-08-03 07:00:00 +0000: [6.5499999999999998],
2015-08-10 07:00:00 +0000: [2.0] ]
我想做的是获取所有日期的年份,并将其存储在[String:Double]
键值字典中,其中与年份键配对的值是该特定年份的所有值的总和
例如,在上述代码中,以下是所需的输出:
var yearDouble_ARRAY = [ "2012": 6.5499999999999998,
"2013": 10.0,
"2015": 2.0,
"2016": 6.0,
"2017: 20.880000000000001]
注:对于“2017年”,从[(11.88000000000001+3.0)+6.0]获取20.88000000000001
我怎样才能达到预期的效果
谢谢
到目前为止我所尝试的
var stringDates = [String: Int]()
for (index, date) in dateDouble_ARRAY.enumerated()
{
let formatter = DateFormatter()
formatter.dateFormat = "yyyy"
let yearOnly = formatter.string(from: date.key)
stringDates[yearOnly] = index
}
let yearOnly_ARRAY = stringDates.keys.sorted()
但是,我只能存储非重复年份,我不确定如何对与年份相关的值求和。您的代码只缺少当前双倍的总和:
let datesDoubles = [
Date(): [11.880000000000001, 3.0],
Date(timeIntervalSinceNow: 3600 * 24 * 60 * -1 ): [6.0],
Date(timeIntervalSinceNow: 3600 * 24 * 365 * -1): [5.0],
Date(timeIntervalSinceNow: 3600 * 24 * 365 * -1 * 2): [6.0],
Date(timeIntervalSinceNow: 3600 * 24 * 365 * -1 * 4): [5.0],
Date(timeIntervalSinceNow: 3600 * 24 * 365 * -1 * 5): [6.5499999999999998],
Date(timeIntervalSinceNow: 3600 * 24 * 365 * -1 * 6): [2.0]
]
var stringDates = [String : Double]()
let formatter: DateFormatter = {
$0.dateFormat = "yyyy"
return $0
}(DateFormatter())
for dateDouble in datesDoubles {
let yearOnly = formatter.string(from: dateDouble.key)
if let valueForDate = stringDates[yearOnly] {
stringDates[yearOnly] = valueForDate + dateDouble.value.reduce(0,+)
} else {
stringDates[yearOnly] = dateDouble.value.reduce(0,+)
}
}
print(stringDates)
您的代码只缺少当前双倍的总和:
let datesDoubles = [
Date(): [11.880000000000001, 3.0],
Date(timeIntervalSinceNow: 3600 * 24 * 60 * -1 ): [6.0],
Date(timeIntervalSinceNow: 3600 * 24 * 365 * -1): [5.0],
Date(timeIntervalSinceNow: 3600 * 24 * 365 * -1 * 2): [6.0],
Date(timeIntervalSinceNow: 3600 * 24 * 365 * -1 * 4): [5.0],
Date(timeIntervalSinceNow: 3600 * 24 * 365 * -1 * 5): [6.5499999999999998],
Date(timeIntervalSinceNow: 3600 * 24 * 365 * -1 * 6): [2.0]
]
var stringDates = [String : Double]()
let formatter: DateFormatter = {
$0.dateFormat = "yyyy"
return $0
}(DateFormatter())
for dateDouble in datesDoubles {
let yearOnly = formatter.string(from: dateDouble.key)
if let valueForDate = stringDates[yearOnly] {
stringDates[yearOnly] = valueForDate + dateDouble.value.reduce(0,+)
} else {
stringDates[yearOnly] = dateDouble.value.reduce(0,+)
}
}
print(stringDates)
你试过什么?所以这不是我的代码,我没有投票否决你。这不是我的反对票,而是完全可以理解的。顺便说一句,你的声誉比你链接的OP高出很多(4年以上,1周)。您应该已经知道网站规则Double_数组是字典而不是数组。这也是一本字典。您应该为变量选择更好的名称。他们完全误导了另一个误导性的名字是你的for循环中的date
。循环中的日期是一个键值元组。您尝试了什么?所以这不是我的代码,我没有投票否决你。这不是我的反对票,而是完全可以理解的。顺便说一句,你的声誉比你链接的OP高出很多(4年以上,1周)。您应该已经知道网站规则Double_数组是字典而不是数组。这也是一本字典。您应该为变量选择更好的名称。他们完全误导了另一个误导性的名字是你的for循环中的date
。循环中的日期是一个键值元组。