排序对象数组日期,其中日期为字符串数据类型c#
本文关键字:日期 字符串 数据类型 对象 数组 排序 | 更新日期: 2023-09-27 18:15:11
尝试对这些日期进行排序w
object[] Dates = pivotGridFieldDates.GetUniqueValues();
results of Dates
9/10/2015
9/11/2015
9/2/2015
9/20/2015
9/25/2015
9/7/2015
9/8/2015
日期格式根据文化偏好而更改,我想对这些对象数组日期进行排序....
where Datetype of "Dates" is {Name = "String" FullName = "System.String"}
我的代码
object[] Dates = pivotGridFieldDates.GetUniqueValues();
string result;
List<string> list=new List<string>();
var map = new List<String>();
foreach (var value in Dates)
{
string map1= Convert.ToString(value);
DateTime newdate = DateTime.ParseExact(map1, culture.ShortDatePattern,
CultureInfo.InvariantCulture);
result = newdate.ToString("yyyyMMdd");
map.Add(result);
}
map.Sort();
排序后,我如何将这个"映射"列表转换为对象[]周日期??
无需转换、排序和返回转换,您可以使用自定义比较委托进行排序而无需转换,如下所示:
Dates.Sort((lhs, rhs) => {
var lhsDate = DateTime.ParseExact(Convert.ToString(lhs), culture.ShortDatePattern, CultureInfo.InvariantCulture);
var rhsDate = DateTime.ParseExact(Convert.ToString(rhs), culture.ShortDatePattern, CultureInfo.InvariantCulture);
return lhsDate.CompareTo(rhsDate);
});
您可以简单地使用OrderBy
(或者OrderByDescending
)来排序序列。也不需要单独的列表-只需Select
执行转换,如:
var listOfSortedStringDates = Dates.Select(v => DateTime.ParseExact( // parse
v.ToString(), // ToString as we have objects
culture.ShortDatePattern, CultureInfo.InvariantCulture))
.OrderBy(x=>x) // sort
.Select(newdate => newdate.ToString(culture.ShortDatePattern)) // back to string
.ToList();
正如Matt Johnson指出的,你只需要在OrderBy
中进行解析——不需要来回转换:
var listOfSortedStringDates = Dates
.OrderBy(v => DateTime.ParseExact(
v.ToString(), culture.ShortDatePattern, CultureInfo.InvariantCulture))
.ToList();