如何按 NSDate 对 Swift 中的字典进行排序?
How to sort a dictionary in Swift by NSDate?
我在 Swift 中有一本字典,看起来有点像这样:
[
"1": [
"start": //An NSDate,
"end": //An NSDate,
"id": "1",
"other non relevant items": "below",
]
]
我想按开始日期排序,键为 "start"
。我看过关于按值 here 对字典进行排序的文章,但是我如何使用 NSDates 来做到这一点?也可以举个例子吗?
请注意,您无法对字典进行排序,除非您可以对任何序列进行排序,这会将其转换为 key/value 对数组。
你没有说,但假设你的字典是 [String:[String:AnyObject]]
类型的,你可以像这样对它进行排序(以获得成对数组的结果,即 [(String,[String:AnyObject])]
):
let sorted = d.sort { lhs,rhs in
let l = lhs.1["start"] as? NSDate
let r = rhs.1["start"] as? NSDate
return l < r
}
这是假设您还增强了 NSDate
以拥有像这样的 <
运算符:
extension NSDate: Comparable { }
public func ==(lhs: NSDate, rhs: NSDate) -> Bool {
return lhs.isEqualToDate(rhs)
}
public func <(lhs: NSDate, rhs: NSDate) -> Bool {
return lhs.compare(rhs) == .OrderedAscending
}
根据字典的实际类型,这可能需要更多类型强制。
如果您不想要排序数组中的键(因为它只是 ID 的复制品),只需对值进行排序:
let sorted = d.values.sort { lhs, rhs in
let l = lhs["start"] as? NSDate
let r = rhs["start"] as? NSDate
return l < r
}
也就是说,除了最基本的操作之外,我建议不要使用字典,而是编写自定义结构并将数据存储在其中,这将使此类操作更加简单。
我在 Swift 中有一本字典,看起来有点像这样:
[
"1": [
"start": //An NSDate,
"end": //An NSDate,
"id": "1",
"other non relevant items": "below",
]
]
我想按开始日期排序,键为 "start"
。我看过关于按值 here 对字典进行排序的文章,但是我如何使用 NSDates 来做到这一点?也可以举个例子吗?
请注意,您无法对字典进行排序,除非您可以对任何序列进行排序,这会将其转换为 key/value 对数组。
你没有说,但假设你的字典是 [String:[String:AnyObject]]
类型的,你可以像这样对它进行排序(以获得成对数组的结果,即 [(String,[String:AnyObject])]
):
let sorted = d.sort { lhs,rhs in
let l = lhs.1["start"] as? NSDate
let r = rhs.1["start"] as? NSDate
return l < r
}
这是假设您还增强了 NSDate
以拥有像这样的 <
运算符:
extension NSDate: Comparable { }
public func ==(lhs: NSDate, rhs: NSDate) -> Bool {
return lhs.isEqualToDate(rhs)
}
public func <(lhs: NSDate, rhs: NSDate) -> Bool {
return lhs.compare(rhs) == .OrderedAscending
}
根据字典的实际类型,这可能需要更多类型强制。
如果您不想要排序数组中的键(因为它只是 ID 的复制品),只需对值进行排序:
let sorted = d.values.sort { lhs, rhs in
let l = lhs["start"] as? NSDate
let r = rhs["start"] as? NSDate
return l < r
}
也就是说,除了最基本的操作之外,我建议不要使用字典,而是编写自定义结构并将数据存储在其中,这将使此类操作更加简单。