我有要以伪拓扑方式排序的任务列表。说,我有这样的事情:
enum Task {
case a(Int, Int)
case b(String)
case c(Bool)
}
我要求a
在任何任务之前执行所有b
任务,并且在所有b
任务之前执行所有c
任务。此外,同一时间的所有任务都需要保持与输入中相同的顺序。
用计算机科学术语来说,我需要的是
- 稳定的排序算法和
- 一种为其提供部分订单的方法。
Swift 标准库中有这样的东西吗?
观察:
Comparable
,一种用于排序的自然协议,要求顺序是总的。sorted
可以使用部分订单,但不稳定。
作为替代方案,拓扑排序算法也可以工作,即使它会做的比我需要的更多。