我有一個文本文件被讀入包含星期一至星期五日期的string[]
,但以隨機順序。我想對它們進行排序,以便它們在日曆周內顯示。如何對星期數組進行排序,以便它們顯示爲日曆周(以C#形式)?
我試過Array.Sort()
和Array.Reverse()
但他們不工作。
任何想法?
我有一個文本文件被讀入包含星期一至星期五日期的string[]
,但以隨機順序。我想對它們進行排序,以便它們在日曆周內顯示。如何對星期數組進行排序,以便它們顯示爲日曆周(以C#形式)?
我試過Array.Sort()
和Array.Reverse()
但他們不工作。
任何想法?
只需根據字符串的枚舉DayOfWeek
的相應值進行排序,然後將其返回給字符串。
string [] initialArray = {"Friday", "Monday", ... } ;
string [] sortedArray = initialArray.OrderBy(s => Enum.Parse(typeof(DayOfWeek), s)).ToArray() ;
問題是,排序方法將它們視爲字符串,因此它們按字母順序排序(字符串的默認比較)。你需要turn them into actual days of the week(這是一個枚舉(一個數字))。
要轉換成DayOfWeek
枚舉:
public static DayOfWeek ToDayOfWeek(string str) {
return (DayOfWeek)Enum.Parse(typeof(DayOfWeek), str);
}
然後你可以使用內置的功能,只是對它們進行排序。
我喜歡LINQ:
String[] weekdayArray = {"Monday", "Saturday", "Wednesday", "Tuesday", "Monday", "Friday"};
var daysOfWeek = weekdayArray
.Select(str => ToDayOfWeek(str))
.OrderBy(dow => dow);
這裏是一個.NET Fiddle。
不妨使'ToDayOfWeek'成爲'DateTime'擴展名。 – 2015-04-03 13:20:48
我確實在.NET Fiddle中將它作爲擴展(對'String')。但解釋擴展方法比我想要做的更多。 – ryanyuyu 2015-04-03 13:21:17
它們是否包含字符串或實際的DateTime對象? – ryanyuyu 2015-04-03 13:06:12
只是字符串。例如。單詞'Monday'或'Friday'等。 – NFI78 2015-04-03 13:06:46
好的。那麼問題是,排序方法將它們視爲字符串,因此它們按字母順序排序。你需要把它們變成一週中的實際日子(這是一個枚舉(一個數字))。然後這些排序將正常工作。 – ryanyuyu 2015-04-03 13:08:31