通过嵌套字典解析的最有效方法

时间:2020-07-10 03:46:33

标签: ios swift

我有以下字典:

var masterDict = [Double : [Date:[String:Any]]]()

我想根据此数据源检索以下信息:

  • 字典中存在最早的Date对象(搜索所有Double键)。
  • 词典中存在的最新/最远Date对象(搜索所有Double键)。

我的想法是循环遍历.keys的{​​{1}},然后进行枚举,但是我问是否有一种更快捷的方法来完成对这些信息的检索(可能也更快)? / p>

3 个答案:

答案 0 :(得分:0)

您可以在字典上使用排序功能,排序条件将基于日期比较。

var masterDict = [Double : [Date:[String:Any]]]()

您可以基于它访问最新和最远的日期。

let sorted = masterDict.sorted { (dict1, dict2) -> Bool in
    return dict1.value.keys.first! < dict2.value.keys.first!
}

尝试对字典排序后的数组的第一个和最后一个属性以获取最新日期。

print(sorted.first!.value)
print(sorted.last!.value)

答案 1 :(得分:0)

首先从values获取所有masterDict,并使用 flatMap(_:) 将其展平,创建单个Array

let values = masterDict.values.flatMap { $0 }

接下来,使用 values

升序sorted(_:)进行排序
let sortedValues = values.sorted { $0.key.compare($1.key) == .orderedAscending }

现在在first上使用lastsortedValues来获取最新的Date实例,

let first = sortedValues.first?.key
let last = sortedValues.last?.key

答案 2 :(得分:0)

您可以使用reduce提取所有日期值

let allDates = masterDict.reduce(into: []) { $0.append(contentsOf: $1.value.keys) }

然后您只需获取最小和最大日期

print(allDates.max())
print(allDates.min())

或者,如果您更喜欢第一个和最后一个,则可以对数组进行排序

let allDates = masterDict.reduce(into: []) { $0.append(contentsOf: $1.value.keys) }.sorted()

print(allDates.last)
print(allDates.first)