Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS Swift:如何计算密钥对字典中每个值的总和并将其存储在单独的字典中?_Ios_Arrays_Swift_Dictionary - Fatal编程技术网

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
。循环中的日期是一个键值元组。