【问题标题】:Merge sort days of week in order of weekday and not alphabetical按工作日的顺序而不是字母顺序合并排序的星期几
【发布时间】:2015-06-20 13:14:04
【问题描述】:

我有一个带有字符串属性的对象数组,它代表工作日。我想编写一个归并排序算法来按工作日的顺序对我的对象数组进行排序。

我能够编写合并排序算法,但我想知道如何让它按工作日而不是按字母顺序排序? 提前非常感谢。

【问题讨论】:

  • 为什么要为固定输入写排序算法?
  • 您首先需要关联一个可用于对条目进行排序的数值。在 C++ 中,我会使用 std::map<std::string,int> dayOrder 并输入 dayOrder["Sunday"] = 0、dayOrder["Monday"] = 1 等。我不知道 C# 中有什么功能
  • 你能把你的字符串属性改成DayOfWeek吗?
  • @manpreetbhamba 这不是一个固定输入,我的对象数组中有 144 个项目,并且 day 属性范围从星期一到星期五
  • 向我们展示您已经拥有的用于合并排序算法的代码。

标签: c# algorithm sorting mergesort


【解决方案1】:

为支持自定义比较器的对象使用集合,或者只在您的对象as demonstrated here 上实现 IComparable。然后只需使用您的属性的静态映射到排序,或者如果您可以将字符串属性映射到 DayOfWeek 枚举,然后使用该内置排序。

【讨论】:

    【解决方案2】:

    不要编写排序算法,而是编写一个简单的比较器来实现 IComparer,将您的数组转换为列表,对该列表进行排序,然后在需要时转换回数组。一个可能的比较器将是这样的:

    Public WeekDayNameComparer<YourObject> : IComparer<yourObject> 
    {
       private string[] WeekDays = {"sunday", "monday", ..."friday"}
       public int Compare(YourObject x, YourObject y) {
          return Array.indexOf(WeekDays, x.WeekDay).CompareTo(Array.indexOf(WeekDays, y.WeekDay));
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-13
      • 2020-07-05
      相关资源
      最近更新 更多