如何从DateTime集合中获取最新日期?

时间:2015-01-30 12:59:55

标签: datetime d

我有类型DateTime DateTime [] dts;的数组 我怎样才能得到它的最新日期?

3 个答案:

答案 0 :(得分:4)

无需排序。使用minPos可能不是获取最大值的最方便方法,因为它返回范围

您可以将reducemax一起用作谓词。此方法适用于任何范围或类似元素,而不仅仅是DateTime

import std.datetime;
import std.algorithm;
import std.stdio;

void main(){
    DateTime[] times;   // array of DateTimes filled with dummy data
    foreach (i; 0 .. 5) {
        times ~= DateTime() + dur!"seconds"(2 * i);
    }

    auto t = times.reduce!max;

    writefln("All Times: %s", times);
    writefln("Most Recent Time: %s", t);
}

答案 1 :(得分:2)

minPos是另一个std.algorithm选项。

auto latestDateTime = dts.minPos!((a,b) => a > b).front;

不要让名字minPos解雇你,它也可以用来找到最大值,只是告诉它使用不同的比较,如上所述(如果你想要最早的日期, dts.minpos.front就够了。 与大多数D算法一样,minPos会返回一个范围,因此需要front来实际抓取该元素。

minPos应该比sort做更少的工作,而且它避免了sort改变原始数组的问题。

答案 2 :(得分:1)

这是一个愚蠢的例子,但是完成了工作:

import std.datetime;
import std.algorithm;
import std.stdio;
import core.thread;
void main(){
    DateTime[] times;   // array of DateTimes filled with dummy data
    for(int i=0; i<5; i++){
        times ~= DateTime() + dur!"seconds"(2 * i);
    }

    // This is the important line to take away from this. 
    // It uses std.algorithm.sort to sort the array in ascending order.
    // .front then takes the first item from the result
    auto t = times.sort!((a,b) => a > b).front;

    writefln("All Times: %s", times);
    writefln("Most Recent Time: %s", t);
}