我必须实现一个算法,它接收DateTime列表并恢复每个月的最新DateTime,我不知道该怎么做。 例如:
29/06/2016 -> Lastest date of june
27/06/2016
05/05/2016 -> Lastest date of may
15/04/2016 -> Lastest date of april
13/04/2016
...
预期结果
29/06/2016
05/05/2016
15/04/2016
答案 0 :(得分:4)
您所知道的是日期列表中每月的最长日期。您可以使用GroupBy
和Max
来获取LINQ,例如:
var maxDatesPerMonth=from date in dates
group date by new {date.Year,date.Month} into months
select months.Max();
或
var maxDatesPerMonth=dates.GroupBy(date=>new {date.Year,date.Month})
.Select(months=>months.Max());
答案 1 :(得分:0)
试试这个......
class Program
{
static void Main(string[] args)
{
var dateTimes = new[]
{
new DateTime(2016, 06, 29 ),
new DateTime(2016, 06, 27 ),
new DateTime(2016, 05, 05 ),
new DateTime(2016, 04, 15 ),
new DateTime(2016, 04, 13 )
};
var years = dateTimes.GroupBy(x => x.Year).OrderByDescending(x => x.Key);
foreach (IGrouping<int, DateTime> grouping in years)
{
var months = grouping.GroupBy(x => x.Month);
foreach (IGrouping<int, DateTime> month in months)
{
Console.WriteLine(month.First());
}
}
Console.ReadLine();
}
}
这输出以下内容......
29/06/2016 00:00:00
05/05/2016 00:00:00
15/04/2016 00:00:00
答案 2 :(得分:0)
您可以使用LINQ解决此问题。
伪代码:
dateList.Where(x => x.Month == 6).Max()
这将为您提供6月的最新日期。
确保使用DateTime类型的正确属性而不是*.Month
。您可能还需要指定.Max()
,可能需要.Select(x => x.Day).Max()
。
尽管如此:LINQ是要走的路。 希望它有所帮助。