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

如何从DateTime集合中获取最新日期?,datetime,d,Datetime,D,我得到了类型为DateTime DateTime[]dts的数组; 如何从中获取最新日期?这是一个愚蠢的示例,但它的作用是: 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;

我得到了类型为DateTime DateTime[]dts的数组;
如何从中获取最新日期?

这是一个愚蠢的示例,但它的作用是:

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);
}
是另一个标准算法选项

auto latestDateTime=dts.minPos!a、 b=>a>b.前方

不要让minPos这个名字来决定你,它也可以用来找到最大值,只要告诉它使用不同的比较,就像我上面所做的那样,如果你想要最早的日期,dts.minPos.front就足够了。 与大多数D算法一样,minPos返回一个范围,因此需要front来实际获取元素


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

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

您可以使用reduce和max作为谓词。这种方法将适用于任何范围或类似的元素,而不仅仅是DateTime


排序是一种破坏性的算法,它在适当的位置进行排序,而且这会比实际需要做更多的工作来获得值是的,你说得对。你的答案是减少!马克斯好多了!sort是一个急切的算法,它将在适当的位置对数据进行排序,不涉及延迟计算
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);
}