Ios 对键为日期字符串的字典进行排序
我有一本字典。每个键都是“dd-mm-yyyy”格式的日期。值是对象数组。我想按日期对字典进行排序,以便在表视图中将每个日期显示为一个部分时,它们都是按时间顺序排列的Ios 对键为日期字符串的字典进行排序,ios,swift,Ios,Swift,我有一本字典。每个键都是“dd-mm-yyyy”格式的日期。值是对象数组。我想按日期对字典进行排序,以便在表视图中将每个日期显示为一个部分时,它们都是按时间顺序排列的 let sortedDict = self?.entriesDict.sorted(by: { $0.key > $1.key }) 我认为如果我颠倒了日期格式,上述方法可能有效,但它不会返回swift字典(我认为它返回的是NSDictionary)。aDictionary根据定义是一个未排序的集合(也是一个NSDic
let sortedDict = self?.entriesDict.sorted(by: { $0.key > $1.key })
我认为如果我颠倒了日期格式,上述方法可能有效,但它不会返回swift字典(我认为它返回的是NSDictionary)。a
Dictionary
根据定义是一个未排序的集合(也是一个NSDictionary
)。如果在字典
上调用排序
,则返回值将是数组
类型,即字典中以元组表示的键值对数组
要实现您的目标并将字典
用作UITableViewDataSource
,您应该做的是保留字典键的排序数组,并且在数据源方法中,从该排序数组中检索正确的键,然后使用该键从原始字典中检索值
我还建议将字典键存储为Date
对象,而不是日期字符串
在你的问题中没有更多的上下文,这大概是你应该做的:
let sortedKeys = entriesDict.keys.sorted()
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return sortedKeys.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "yourCellId", for: indexPath)
let entryKey = sortedKeys[indexPath.row]
cell.textLabel?.text = entriesDict[entryKey]
return cell
}
我认为您实际上应该使用日期类型作为字典的键类型,而不是字符串。以前,我们在一个表中显示所有数据,其中包含1个部分,并按每个对象的Unix时间戳排序。我目前正在尝试将表分为每日部分,这导致了此临时解决方案。我确实需要不过要重新评估一下。谢谢你的回答。不知何故,我总是忘记字典是无序的。我的代码肯定需要改进(例如使用日期而不是日期字符串)但您的建议帮助我找到了一个临时解决方案。我得到一个键数组,对它们进行排序,然后在获取表数据时使用该数组:var s=array(entriesDict.keys)s=s.sorted{$0<$1}