如何编写算法对指定对象进行排序
本文关键字:对象 排序 何编写 算法 | 更新日期: 2023-09-27 18:06:41
在我的场景中,我有以下对象
<>之前& lt; playlist>>程序id="s63e" start="2011-8-24 16:00:00" end="2011-8-24 17:00:00" priority="2"/><程序id start="2011-8-24 19:00:00" end="2011-8-24 21:00:00" priority="2" />我想按时间和优先级排序。但我的思想完全扭曲了。
如你所见,一个程序对象有它自己的时区和优先级。
程序通常在达到其开始时间时执行,并在达到其结束时间时结束执行。
但是在一个时区只允许执行一个程序,例如,当高优先级的程序正在执行时,低优先级的程序不能启动。
优先级越低优先级越高
排序结果应该返回类型为Dictionary<DateTime,string>,字典只是存储哪个时间执行哪个程序,任何思维方式或排序算法都是值得赞赏的。
你有很多问题,所以,让我们来分析一下。我会这样做:
- 解析每个"程序"记录为一个简单的对象,为每个XML属性提供相关属性。结果将是您刚刚创建的新类的无序列表,例如
List<ProgramEntry>
。 - 实现一个
IComparer
,它比较上述对象的两个实例,并决定在排序列表中哪个在另一个之前。关于如何做到这一点,有很多例子。这就是你将实现优先级与时区逻辑的地方,因此,例如,你可以让比较器检查开始和结束时间是否有重叠,如果是,使用优先级来解决冲突。 - 对1中创建的列表进行排序。使用这个比较器。这就像说
myList.Sort(MyComparer);
一样简单。列表。Sort自动使用一种高效的算法,并且尽可能少地调用比较代码。(请使用正确的命名约定,这只是一个示例)。在比较过程中,您还可以通过设置一个属性将"丢失"记录标记为禁用。 - 将排序列表中所有未标记为禁用的项目添加到字典中。
这只是一种方法,我相信你可以想出其他的,或者使用不同的优先级算法来确定哪些记录被标记为禁用(例如,一个3小时长的条目优先级2优于三个1小时长的记录,它重叠?)。
您可以使用LINQ按优先级对项目进行分组,然后按时间对它们进行排序。