我有一个文本文件被读入包含星期一至星期五日期的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