2015-04-03 68 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

相关问题