根据当前的星期几来排序星期几

时间:2015-01-22 05:48:10

标签: c# linq sorting

我正在尝试使用Linq中的DayOfWeek枚举使用Linq,使用以下代码段对<... 1}}枚举进行排序 -

DayOfWeek currentDayOfWeek = DateTime.UtcNow.DayOfWeek;

SortedDictionary<DayOfWeek, TimeSpan> backupSchedule = 
    new SortedDictionary<DayOfWeek, TimeSpan>();

Dictionary<DayOfWeek, TimeSpan> sortedScheduleBasedOnCurrentDayOfWeek 
    = new Dictionary<DayOfWeek, TimeSpan>();

sortedScheduleBasedOnCurrentDayOfWeek = backupSchedule.OrderBy(
    backupdayandtime => (((int)backupdayandtime.Key + (int)currentDayOfWeek) % 7))
    .ToDictionary(t => t.Key, t => t.Value);

如果当前DayOfWeekWednesday, 以及backupSchedule中的天数列表

Friday
Thursday
Wednesday

我希望上面的结果是

Wednesday
Thursday
Friday

然而,上面的代码导致

Thursday
Friday
Wednesday

我在这里遗漏了什么吗?

3 个答案:

答案 0 :(得分:1)

首先,我使用的那种是

backupSchedule
    // This lambda evaluates to `true` for e.g. Sunday through Tuesday;
    // `true > false` therefore these days will appear last
    .OrderBy(kvp => kvp.Key < currentDayOfWeek)
    // This then sorts each half in the normal order - not really
    // necessary if the original source is already in the normal order
    .ThenBy(kvp => kvp.Key)

其次,你不能真正将一个序列存储在字典中,并希望字典能够记住你把它放入的顺序。在这种情况下,似乎可以工作,但是没有保证它会。

您无法将结果存储在字典中 - 只需将键按顺序存储在数组中(或直接在foreach中使用),然后使用原始字典查找值。

答案 1 :(得分:0)

((int)backupdayandtime.Key + (int)currentDayOfWeek) % 7)

那应该是 - 而不是+。

说当前的星期三是星期三是3.星期二然后是2,2-3 = -1,-1 mod 7是6.星期三将是(3-3)mod 7,它是0.星期四将是( 4-3)mod 7为1。

加上你得到星期二= 5,星期三= 6,星期四= 0等,这说明了你最终的订单。

答案 2 :(得分:0)

请尝试运行此LINQ命令。

sortedScheduleBasedOnCurrentDayOfWeek = backupSchedule.OrderBy(backupdayandtime => (((int)backupdayandtime.Key >= (int)currentDayOfWeek)? ((int)backupdayandtime.Key - (int)currentDayOfWeek) : (((int)backupdayandtime.Key + 7) - (int)currentDayOfWeek))).ToDictionary(t => t.Key, t => t.Value);