2015-04-03 63 views
2

我有一個文本文件被讀入包含星期一至星期五日期的string[],但以隨機順序。我想對它們進行排序,以便它們在日曆周內顯示。如何對星期數組進行排序,以便它們顯示爲日曆周(以C#形式)?

我試過Array.Sort()Array.Reverse()但他們不工作。

任何想法?

+0

它們是否包含字符串或實際的DateTime對象? – ryanyuyu 2015-04-03 13:06:12

+0

只是字符串。例如。單詞'Monday'或'Friday'等。 – NFI78 2015-04-03 13:06:46

+2

好的。那麼問題是,排序方法將它們視爲字符串,因此它們按字母順序排序。你需要把它們變成一週中的實際日子(這是一個枚舉(一個數字))。然後這些排序將正常工作。 – ryanyuyu 2015-04-03 13:08:31

回答

3

只需根據字符串的枚舉DayOfWeek的相應值進行排序,然後將其返回給字符串。

string [] initialArray = {"Friday", "Monday", ... } ; 

string [] sortedArray = initialArray.OrderBy(s => Enum.Parse(typeof(DayOfWeek), s)).ToArray() ; 
2

問題是,排序方法將它們視爲字符串,因此它們按字母順序排序(字符串的默認比較)。你需要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

+0

不妨使'ToDayOfWeek'成爲'DateTime'擴展名。 – 2015-04-03 13:20:48

+0

我確實在.NET Fiddle中將它作爲擴展(對'String')。但解釋擴展方法比我想要做的更多。 – ryanyuyu 2015-04-03 13:21:17

相關問題