首页 > 解决方案 > 删除字典数组中重复的月份和年份,然后根据年份和月份将其保存到另一个数组中 - Swift iOS

问题描述

我有一个字典var year_month = [String: Any]数组,并且我将每日销售数据附加到年月。这是附加数据后的数组

[["year": "2019", "month": "July"], ["year": "2019", "month": "July"], "month": "July"], ["month": "July", "year": "2019"], ["month": "July", "year": "2019"], ["month": "July", "year": "2019"], ["year": "2019", "month": "July"], ["year": "2019", "month": "August"], ["month": "August", "year": "2019"], ["year": "2019", "month": "August"],["year": "2020", "month": "July"], ["year": "2020", "month": "July"], "month": "July"], ["month": "July", "year": "2020"], ["month": "July", "year": "2020"], ["month": "July", "year": "2020"], ["year": "2020", "month": "July"], ["year": "2020", "month": "August"], ["month": "August", "year": "2020"], ["year": "2020", "month": "August"]]

然后我需要像这样存储在另一个数组中 var final_year_month = Dictionary<String, Any>像这样

final_year_month.append(["year" : "2019", "value" : ["January","February","March","April","May","June","July","August","September","October","November","December"],
    ["year" : "2020", "value" : ["January","February","March","April","May","June","July","August","September","October","November","December"]]) 

我如何删除重复的年份和月份,并可以根据年份追加所有月份提前谢谢。

标签: arraysswiftdictionary

解决方案


给定这样的数据集:

let dataSet = [["year": "2020", "month": "January"], ["year": "2020", "month": "February"], ["year": "2019", "month": "March"], ["year": "2019", "month": "April"]]

按年份对数据集进行分组:

let yearAndMonthGroupedByYear = Dictionary(grouping: dataSet) { yearAndMonth -> String? in
    return yearAndMonth["year"]
}

这给了我们:

[Optional("2020"): [["year": "2020", "month": "January"], ["year": "2020", "month": "February"]], Optional("2019"): [["year": "2019", "month": "March"], ["month": "April", "year": "2019"]]]

对于每个组,我们希望

  1. 提取该年对应的年份和月份
  2. 摆脱重复的月份
  3. 返回一个由年份和一组唯一月份组成的字典

像这样:

let result = yearAndMonthGroupedByYear.compactMap { year, yearAndMonthArray -> [String: Any]? in
    guard let year = year else { return nil }
    let months = yearAndMonthArray.compactMap { $0["month"] }
    let uniqueMonths = Set(months)
    let arrayOfUniqueMonths = Array(uniqueMonths)
    return ["year": year, "value": arrayOfUniqueMonths]
}

这给了我们:

[["year": "2020", "value": ["January", "February"]], ["value": ["March", "April"], "year": "2019"]]

推荐阅读