d我想返回map
文档:
import std.algorithm.comparison : equal;
import std.conv : to;
alias stringize = map!(to!string);
assert(equal(stringize([ 1, 2, 3, 4 ]), [ "1", "2", "3", "4" ]));
我想返回如下函数:
float[] function(float[]) get_map(alias f){
return map!(f)
}
map返回隐藏类型:
auto mapped(alias f, Range) (Range range) {
import std.algorithm : map;
return range.map!f();//map.
}//要用`auto`.
void main() {
auto r = [1, 2].mapped!(i => 10 * i);
import std.algorithm;
assert(r.equal([10, 20]));
}
需要区间和函数:
float my_function(float x){ return 2*x;}
auto my_function_mapped = mapped(my_function);
assert(my_function_mapped([1.,2.,3.]) == [2.,4.,6.]);
要具体的区间,可以用.数组方法:
float[] get_map(alias f)(float[] input){
import std.algorithm : map;
import std.array : array;
return input.map!(f).array;//这里
}
也可用同名模板:
template mappified(alias func) {
import std.algorithm : map;
alias mappified = map!func;
}//
void main() {
import std.stdio;
writeln([1,2].mappified!(a => a * 10));
}
std.functional包含函数组合工具:这里
惯用D方式:
float times_two(float x) {return 2*x;}
// 确保结果为数组
float[] times_two_array(float[] arr) {
import std.algorithm; // for map
import std.array; // for array
return arr
.map!times_two // 映射函数
.array; // 转为数组
}
void main() {
import std.stdio;
import std.algorithm; // for map
alias map2x = map!times_two;
writeln(map2x([1., 2., 3.]));
float[] arr2 = times_two_array([1., 2., 3.]);
writeln(arr2);
}
浙公网安备 33010602011771号