我有以下字典:
var masterDict = [Double : [Date:[String:Any]]]()
我想根据此数据源检索以下信息:
Date
对象(搜索所有Double
键)。Date
对象(搜索所有Double
键)。我的想法是循环遍历.keys
的{{1}},然后进行枚举,但是我问是否有一种更快捷的方法来完成对这些信息的检索(可能也更快)? / p>
答案 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
上使用last
和sortedValues
来获取最新的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)