由于 DayOfWeek 对字符串数组进行排序
sort string array due to DayOfWeek
我有一个字符串数组
string[] days={ "1", "2", "6" }
我越来越想按照DayOfWeek
排序。
例如“1”是星期一,“2”是星期二,“6”是星期六。今天是星期四。
所以最近的是星期六、星期一、星期二。所以最终数组将是
days={ "6", "1", "2" }
我找不到任何解决方案来对它们进行排序。我该如何对它们进行排序。
提前致谢。
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));
您可以为此使用 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]
执行以下操作:
- 将前后几天分成两组
- 排序(降序)天后天前天前
- 对每组进行排序(升序)
我不知道你是否想要就地排序,但如果你不想更改数组(或将更多处理链接到数组),那么你可以使用 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
方法中使用类似的逻辑
我有一个字符串数组
string[] days={ "1", "2", "6" }
我越来越想按照DayOfWeek
排序。
例如“1”是星期一,“2”是星期二,“6”是星期六。今天是星期四。
所以最近的是星期六、星期一、星期二。所以最终数组将是
days={ "6", "1", "2" }
我找不到任何解决方案来对它们进行排序。我该如何对它们进行排序。
提前致谢。
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));
您可以为此使用 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]
执行以下操作:
- 将前后几天分成两组
- 排序(降序)天后天前天前
- 对每组进行排序(升序)
我不知道你是否想要就地排序,但如果你不想更改数组(或将更多处理链接到数组),那么你可以使用 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
方法中使用类似的逻辑