如何编写算法对指定对象进行排序

本文关键字:对象 排序 何编写 算法 | 更新日期: 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" />& lt;/playlist>之前

我想按时间和优先级排序。但我的思想完全扭曲了。

如你所见,一个程序对象有它自己的时区和优先级。

程序通常在达到其开始时间时执行,并在达到其结束时间时结束执行。

但是在一个时区只允许执行一个程序,例如,当高优先级的程序正在执行时,低优先级的程序不能启动。

优先级越低优先级越高

排序结果应该返回类型为Dictionary<DateTime,string>,字典只是存储哪个时间执行哪个程序,任何思维方式排序算法都是值得赞赏的。

如何编写算法对指定对象进行排序

你有很多问题,所以,让我们来分析一下。我会这样做:

  1. 解析每个"程序"记录为一个简单的对象,为每个XML属性提供相关属性。结果将是您刚刚创建的新类的无序列表,例如List<ProgramEntry>
  2. 实现一个IComparer,它比较上述对象的两个实例,并决定在排序列表中哪个在另一个之前。关于如何做到这一点,有很多例子。这就是你将实现优先级与时区逻辑的地方,因此,例如,你可以让比较器检查开始和结束时间是否有重叠,如果是,使用优先级来解决冲突。
  3. 对1中创建的列表进行排序。使用这个比较器。这就像说myList.Sort(MyComparer);一样简单。列表。Sort自动使用一种高效的算法,并且尽可能少地调用比较代码。(请使用正确的命名约定,这只是一个示例)。在比较过程中,您还可以通过设置一个属性将"丢失"记录标记为禁用。
  4. 将排序列表中所有未标记为禁用的项目添加到字典中。

这只是一种方法,我相信你可以想出其他的,或者使用不同的优先级算法来确定哪些记录被标记为禁用(例如,一个3小时长的条目优先级2优于三个1小时长的记录,它重叠?)。

您可以使用LINQ按优先级对项目进行分组,然后按时间对它们进行排序。