是否/是否有函数std.algorithm
可以std.range
懒惰地计算前向差异?我需要这个来对一个范围内的排序元素(整数)进行不同的打包。整数恰好是SysTime
时间戳。
更新:建议的解决方案:
/** Compute Forward Difference of $(D range).
*/
auto ref forwardDifference(bool reverse = false, Range)(in Range range)
@safe pure nothrow if (isInputRange!Range)
{
import std.algorithm: map;
import std.range: zip, dropOne;
static if (reverse)
return range.zip(range.dropOne).map!(a => a[1] - a[0]);
else
return range.zip(range.dropOne).map!(a => a[0] - a[1]);
}
unittest {
const i = [1, 5, 9, 17];
import std.algorithm: equal;
assert(equal(i.forwardDifference!false, [ -4, -4, -8]));
assert(equal(i.forwardDifference!true, [ +4, +4, +8]));
}
请评论解决方案。