我有一个DateTime对象数组,我希望从它获得第三个最高日期。
DateTime[] dateTimes = new DateTime[]
{
new DateTime(2001, 04, 14),
new DateTime(2061, 12, 29),
new DateTime(2019, 10, 21),
new DateTime(1973, 01, 07),
new DateTime(2014, 07, 19),
new DateTime(1992, 03, 11),
new DateTime(2019, 10, 21)
};
var third = dateTimes.Select(d => new
{
d.Year,
d.Month,
FormattedDate = new DateTime(d.Year, d.Month, d.Day)
})
.Distinct()
.OrderByDescending(d => d.Year)
.ThenByDescending(d => d.Month)
.Skip(2)
.Select(d => d.FormattedDate);
这是返回一个集合,结果应该是19-07-2014
答案 0 :(得分:1)
Select
之后 Skip
返回集合的其余部分。最后需要FirstOrDefault
:
var third = dateTimes.Select(d => new
{
d.Year,
d.Month,
FormattedDate = new DateTime(d.Year, d.Month, d.Day)
})
.Distinct()
.OrderByDescending(d => d.Year)
.ThenByDescending(d => d.Month)
.Skip(2)
.Select(d => d.FormattedDate)
.FirstOrDefault();
之后,您需要检查结果的默认值,如果原始序列的元素少于三个,则会返回该值。
答案 1 :(得分:1)
你有没有理由比较一年又一个月?这应该可以正常工作:
Select(d => d.Date)
也无需根据示例数组创建新的var third = dateTimes.Select(d => d.Date).Distinct().OrderByDescending(d => d).Skip(2).FirstOrDefault();
。但是,如果您想要删除时间,可以将0.12.14
添加到混音中:
from bokeh.io import output_file, show
from bokeh.plotting import figure
p = figure()
p.circle(x=[1,2,3], y=[4,6,5], size=20)
p.xaxis.ticker = [1, 2, 3]
p.xaxis.major_label_overrides = {1: 'A', 2: 'B', 3: 'C'}
output_file("test.html")
show(p)
答案 2 :(得分:0)
这里有一些卷积。无需投影到不使用的单独对象。只需在投影中使用格式化日期即可。
var third = dateTimes.Select(d => new DateTime(d.Year, d.Month, d.Day))
.Distinct()
.OrderByDescending(d => d)
.Skip(2)
.FirstOrDefault();
这将为您提供 2014年7月19日