为了账号安全,请及时绑定邮箱和手机立即绑定

由于 DayOfWeek 对字符串数组进行排序

由于 DayOfWeek 对字符串数组进行排序

C#
紫衣仙女 2022-10-23 16:12:09
我有一个字符串数组string[] days={ "1", "2", "6" }我想DayOfWeek越来越多地对其进行排序。例如,“1”是星期一,“2”是星期二,“6”是星期六。今天是星期四。所以最近的一个是星期六,星期一,星期二。所以最终数组将是days={ "6", "1", "2" }我找不到任何解决方案来对它们进行排序。我怎样才能对它们进行排序。提前致谢。
查看完整描述

3 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

您可以为此使用 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. 对每个组进行排序(升序)


查看完整回答
反对 回复 2022-10-23
?
翻阅古今

TA贡献1780条经验 获得超5个赞

String 解释起来有点复杂,所以我用 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


查看完整回答
反对 回复 2022-10-23
?
MMTTMM

TA贡献1869条经验 获得超4个赞

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


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如果你想走那条路,你也可以在方法中使用类似的逻辑


查看完整回答
反对 回复 2022-10-23
  • 3 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信