【问题标题】:Sort subarray inside a grouped dictionary对分组字典中的子数组进行排序
【发布时间】:2018-11-01 10:47:16
【问题描述】:

我有 3 个数组,我必须在同一年合并。我已经这样做了,然后我使用Dictionary.init(grouping: weatherDataArray) 进行了分组,现在我正在尝试对分组字典进行排序。这是我拥有的数据示例:

[2008: [["year": 2008, "month": 12, "rainfallValue": 87.9000015, "tminValue": 0.200000003, "tmaxValue": 6.0999999], ["year": 2008, "month": 11, "rainfallValue": 106.400002, "tminValue": 0.200000003, "tmaxValue": 6.0999999], ["year": 2008, "month": 10, "rainfallValue": 155.699997, "tminValue": 0.200000003, "tmaxValue": 6.0999999], ["year": 2008, "month": 9, "rainfallValue": 106.300003, "tminValue": 0.200000003, "tmaxValue": 6.0999999], ["year": 2008, "month": 8, "rainfallValue": 133.600006, "tminValue": 0.200000003, "tmaxValue": 6.0999999], ["year": 2008, "month": 7, "rainfallValue": 108.099998, "tminValue": 0.200000003, "tmaxValue": 6.0999999], ["year": 2008, "month": 6, "rainfallValue": 78.5, "tminValue": 0.200000003, "tmaxValue": 6.0999999], ["year": 2008, "month": 5, "rainfallValue": 47.9000015, "tminValue": 0.200000003, "tmaxValue": 6.0999999], ["year": 2008, "month": 4, "rainfallValue": 76.1999969, "tminValue": 0.200000003, "tmaxValue": 6.0999999], ["year": 2008, "month": 3, "rainfallValue": 122.5, "tminValue": 0.200000003, "tmaxValue": 6.0999999], ["year": 2008, "month": 2, "rainfallValue": 82.3000031, "tminValue": 0.200000003, "tmaxValue": 6.0999999], ["year": 2008, "month": 1, "rainfallValue": 189.600006, "tminValue": 0.200000003, "tmaxValue": 6.0999999]], 1992: [["year": 1992, "month": 6, "rainfallValue": 38.5999985, "tminValue": 3.20000005, "tmaxValue": 5.80000019], ["year": 1992, "month": 5, "rainfallValue": 57.2999992, "tminValue": 3.20000005, "tmaxValue": 5.80000019], ["year": 1992, "month": 4, "rainfallValue": 88.0, "tminValue": 3.20000005, "tmaxValue": 5.80000019], ["year": 1992, "month": 3, "rainfallValue": 125.0, "tminValue": 3.20000005, "tmaxValue": 5.80000019], ["year": 1992, "month": 2, "rainfallValue": 87.5, "tminValue": 3.20000005, "tmaxValue": 5.80000019], ["year": 1992, "month": 1, "rainfallValue": 77.4000015, "tminValue": 3.20000005, "tmaxValue": 5.80000019], ["year": 1992, "month": 12, "rainfallValue": 105.0, "tminValue": 3.20000005, "tmaxValue": 5.80000019], ["year": 1992, "month": 11, "rainfallValue": 158.5, "tminValue": 3.20000005, "tmaxValue": 5.80000019], ["year": 1992, "month": 10, "rainfallValue": 94.5, "tminValue": 3.20000005, "tmaxValue": 5.80000019], ["year": 1992, "month": 9, "rainfallValue": 115.5, "tminValue": 3.20000005, "tmaxValue": 5.80000019], ["year": 1992, "month": 8, "rainfallValue": 157.300003, "tminValue": 3.20000005, "tmaxValue": 5.80000019], ["year": 1992, "month": 7, "rainfallValue": 84.1999969, "tminValue": 3.20000005, "tmaxValue": 5.80000019]]]

基本上[Int: [[String: Any]]] 类型。

所以我将组作为年份,我的目标是创建一个按年份和月份排序的数组,ascending 基本上是[[String: Any]],它将首先显示 1992 年的数据,月份将从 1-12 变为然后是 2008 年以及与今年相关的月份,从 1 到 12 日。

下一步应该是什么?还是有不同的方法来做到这一点?

【问题讨论】:

  • 请发一个正确的json(不只是一部分),以便大家使用美化器。
  • @RatulSharker 数据很大,我更新了数据结构供参考。
  • 然后发布一些可以使用任何在线 json 美化器(如 jsonformatter.curiousconcept.com
  • @RatulSharker 更新

标签: swift sorting dictionary


【解决方案1】:

您可以先根据键对分组字典进行排序,得到一个按年份排序的元组数组,然后在其上调用map并返回值,即字典数组和根据月份在map 调用中对它们进行排序。

我将您问题中的值存储在groupedDict

let sortedArrFromDict = groupedDict.sorted(by: {$0.key < $1.key}).flatMap({$0.value.sorted(by: {$0["month"]! < $1["month"]!})})
print(sortedArrFromDict)

【讨论】:

  • 太棒了!!。只是一件事,我得到了[ [ [String: Any] ] ],但我需要[ [ String: Any] ]。有什么帮助吗?
  • @SharadChauhan 检查我的更新答案,您只需将map 更改为flatMap
猜你喜欢
  • 1970-01-01
  • 2020-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-20
  • 2018-07-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多