Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 对键为日期字符串的字典进行排序_Ios_Swift - Fatal编程技术网

Ios 对键为日期字符串的字典进行排序

Ios 对键为日期字符串的字典进行排序,ios,swift,Ios,Swift,我有一本字典。每个键都是“dd-mm-yyyy”格式的日期。值是对象数组。我想按日期对字典进行排序,以便在表视图中将每个日期显示为一个部分时,它们都是按时间顺序排列的 let sortedDict = self?.entriesDict.sorted(by: { $0.key > $1.key }) 我认为如果我颠倒了日期格式,上述方法可能有效,但它不会返回swift字典(我认为它返回的是NSDictionary)。aDictionary根据定义是一个未排序的集合(也是一个NSDic

我有一本字典。每个键都是“dd-mm-yyyy”格式的日期。值是对象数组。我想按日期对字典进行排序,以便在表视图中将每个日期显示为一个部分时,它们都是按时间顺序排列的

  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}