3 回答

TA貢獻1784條經(jīng)驗 獲得超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]
執(zhí)行以下操作:
將之前和之后的日子分成兩組
對前幾天的后幾天進行排序(降序)
對每個組進行排序(升序)

TA貢獻1780條經(jīng)驗 獲得超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條經(jīng)驗 獲得超4個贊
我不知道您是否想要就地排序,但如果您不想更改數(shù)組(或?qū)⒏嗵幚礞溄拥綌?shù)組),那么您可以使用 LINQ 對數(shù)組進行排序
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 關注
- 137 瀏覽
添加回答
舉報