rns*_*nso 1 functional-programming d
如果我有2个列表:
list1 = [1, 2, 3, 4];
list2 = [10, 25, 35, 58];
Run Code Online (Sandbox Code Playgroud)
我想得到一个列表,其中包含2个列表的相应元素的乘积;
在Python中,可以做到:
outlist = list(map(lambda a,b: a*b, list1, list2))
Run Code Online (Sandbox Code Playgroud)
但是,在D中,我知道以下方法:
import std.stdio;
void main(){
auto list1 = [1, 2, 3, 4];
auto list2 = [10, 25, 35, 58];
int[] outlist;
foreach(i, item; list1){
outlist ~= item*list2[i];
}
writeln(outlist);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
问题1:能否将两个列表都作为foreach的参数?
问题2:如何使用map函数将2个列表的对应元素相乘?
感谢您的见解。
关键是要在应用或之前将zip两个列表的元素(或D中已知的动态数组)组合为一个元组数组。该元组的元素可以与零的索引(即访问和在这个例子中)。mapforeacha[0]a[1]
import std.algorithm.iteration : map;
import std.range : zip;
import std.stdio : writeln;
void main() {
auto list1 = [1, 2, 3, 4];
auto list2 = [10, 25, 35, 58];
// Question #2
auto list3 = zip(list1, list2).map!(a => a[0] * a[1]);
writeln(list3);
// Question #1
typeof(list1) list4;
foreach(a; zip(list1, list2)) {
list4 ~= a[0] * a[1];
}
writeln(list4);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码打印两次:
[10, 50, 105, 232]
Run Code Online (Sandbox Code Playgroud)
如预期的那样。