使用 D 中的 2 个列表的函数式编程函数
Functional programming functions using 2 lists in D
如果我有 2 个列表:
list1 = [1, 2, 3, 4];
list2 = [10, 25, 35, 58];
我想得到一个列表,其中包含 2 个列表的相应元素的乘积;
在Python中可以做到:
outlist = list(map(lambda a,b: a*b, list1, list2))
然而,在 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);
}
我的问题是:
Q1:能否将两个列表都作为 foreach 的参数?
Q2:如何使用map函数将2个列表的对应元素相乘?
感谢您的见解。
关键是在应用map
或foreach
之前使用zip
to combine the elements of the two lists (or dynamic arrays as they are known in D) to a single array of tuples。可以使用基于零的索引访问元组元素(即本例中的 a[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);
}
上面的代码打印了两次:
[10, 50, 105, 232]
符合预期。
如果我有 2 个列表:
list1 = [1, 2, 3, 4];
list2 = [10, 25, 35, 58];
我想得到一个列表,其中包含 2 个列表的相应元素的乘积;
在Python中可以做到:
outlist = list(map(lambda a,b: a*b, list1, list2))
然而,在 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);
}
我的问题是:
Q1:能否将两个列表都作为 foreach 的参数?
Q2:如何使用map函数将2个列表的对应元素相乘?
感谢您的见解。
关键是在应用map
或foreach
之前使用zip
to combine the elements of the two lists (or dynamic arrays as they are known in D) to a single array of tuples。可以使用基于零的索引访问元组元素(即本例中的 a[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);
}
上面的代码打印了两次:
[10, 50, 105, 232]
符合预期。