void Main()
{
SortDaysOfWeek(new[] {
"Monday",
"Wednesday",
"Tuesday",
"Thursday",
"Sunday"
}).Dump();
}
// Define other methods and classes here
DayOfWeek GetDayOfWeekFromString(string str)
{
return (DayOfWeek)Enum.Parse(typeof(DayOfWeek), str);
}
int GetDayOfWeekPosition(DayOfWeek dow)
{
return (int)dow;
}
List<string> SortDaysOfWeek(IEnumerable<string> daysOfWeek)
{
return daysOfWeek
.Select(GetDayOfWeekFromString)
.GroupBy(x => GetDayOfWeekPosition(x), x => x)
.OrderBy(g => g.Key)
.SelectMany(x => x)
.Select(dow => dow.ToString())
.ToList();
}
上面的代碼爲LinqPad寫入(只是刪除Dump()
呼叫)。
這假設你想按星期天排序作爲一週的第一天,這是相當標準的,如果你想讓星期一成爲第一天,我會把它留給你作爲練習來改變這一點。
此代碼生成:
1. Sunday
2. Monday
3. Tuesday
4. Wednesday
5. Thursday
更新
我調整了代碼如下:
void Main()
{
SortDaysOfWeek(new[] {
"Monday",
"Wednesday",
"Tuesday",
"Thursday",
"Sunday"
}).Dump();
}
// Define other methods and classes here
DayOfWeek GetDayOfWeekFromString(string str)
{
return (DayOfWeek)Enum.Parse(typeof(DayOfWeek), str);
}
int GetDayOfWeekPosition(DayOfWeek dow)
{
return (int)dow;
}
List<string> SortDaysOfWeek(IEnumerable<string> daysOfWeek)
{
return daysOfWeek
.Select(GetDayOfWeekFromString)
.OrderBy(x => x, new DayOfWeekComparer(false))
.Select(dow => dow.ToString())
.ToList();
}
class DayOfWeekComparer : IComparer<DayOfWeek>
{
private readonly bool _sundayStart = false;
public DayOfWeekComparer(bool sundayIsStartOfWeek)
{
_sundayStart = sundayIsStartOfWeek;
}
public int Compare(DayOfWeek left, DayOfWeek right)
{
var leftPos = (int)left;
var rightPos = (int)right;
if (!_sundayStart)
{
if (left == DayOfWeek.Monday) leftPos = 0;
if (left == DayOfWeek.Sunday) leftPos = 6;
if (right == DayOfWeek.Monday) rightPos = 0;
if (right == DayOfWeek.Sunday) rightPos = 6;
}
if (leftPos < rightPos) return -1;
if (leftPos > rightPos) return 1;
return 0;
}
}
我看到你基本上覆制了DayOfWeek
枚舉並使用自己的定位,這當然不是這樣做的方式。
'但它的結果沒有按預期工作'你可能想解釋你的期望。沒有它,你的問題是「不清楚」,並可能是downvoted和關閉 – psubsee2003
你想排序天「星期一」,「星期二」...和你初始化ListOfRemainingDays –
是的,@ psubsee2003你是儀式。 –