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]
执行以下操作:
将之前和之后的日子分成两组
对前几天的后几天进行排序(降序)
对每个组进行排序(升序)
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
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如果你想走那条路,你也可以在方法中使用类似的逻辑
- 3 回答
- 0 关注
- 108 浏览
添加回答
举报