从该系列中获得第三高的日期

时间:2017-04-11 17:44:47

标签: c#

我有一个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

3 个答案:

答案 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日