我有类型DateTime DateTime [] dts;
的数组
我怎样才能得到它的最新日期?
答案 0 :(得分:4)
无需排序。使用minPos
可能不是获取最大值的最方便方法,因为它返回范围
您可以将reduce
与max
一起用作谓词。此方法适用于任何范围或类似元素,而不仅仅是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);
}