由于DayOfWeek排序字符串数组

时间:2019-03-14 12:33:04

标签: c# arrays sorting dayofweek

我有一个字符串数组

string[] days={ "1", "2", "6" }

我想越来越根据DayOfWeek对其进行排序。 例如,“ 1”是星期一,“ 2”是星期二,“ 6”是星期六。今天是星期四。 所以最近的一个是星期六,星期一,星期二。所以最终数组将是

days={ "6", "1", "2" }

我找不到对它们进行排序的任何解决方案。如何对它们进行排序。

谢谢。

3 个答案:

答案 0 :(得分:2)

您可以为此使用LINQ:

string[] days = { "1", "2", "6" };

var today = (int)(DateTime.Now.DayOfWeek + 6) % 7;

var result = days
    .GroupBy(x => int.Parse(x) > today)
    .OrderByDescending(x => x.Key)
    .SelectMany(g => g.OrderBy(x => x));

Console.WriteLine("[{0}]", string.Join(", ", result));
# [6, 1, 2]

执行以下操作:

  1. 将前后几天分为两组
  2. 在前几天之前排序(降序)
  3. 按组升序排列(升序)

答案 1 :(得分:1)

字符串的解释有点复杂,所以我改用int。

让星期几始终不小于今天,然后进行比较。

int[] days = { 1, 2, 6 };
int today;
Array.Sort(days, (d1, d2) =>
{
    if(d1 < today)
       d1 += 7;
    if(d2 < today)
       d2 += 7;
    return d1.CompareTo(d2);
});

简短形式

Array.Sort(days, (d1, d2) => (d1 < today ? d1 + 7 : d1).CompareTo(d2 < today ? d2 + 7 : d2));

https://dotnetfiddle.net/QsVnIr

答案 2 :(得分:1)

我不知道您是否要就地排序,但是如果您不想更改数组(或将更多处理链接到该数组),则可以使用LINQ对数组进行排序< / p>

var today = (int)DayOfWeek.Thursday;
int weekDays = 7;
string[] days = { "1", "2", "6" };
var sortedDays = days.Select(int.Parse).OrderBy(d => d > today ? d - today : d + weekDays - today);

如果您想走那条路线,也可以在Array.Sort方法中使用类似的逻辑