使用D

时间:2019-05-31 01:46:37

标签: functional-programming 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个列表的对应元素相乘?

感谢您的见解。

1 个答案:

答案 0 :(得分:2)

关键是在应用{{1}之前,使用zip将两个列表的元素(或D中已知的dynamic arrays)合并到tuples的单个数组中}}或map。可以使用基于零的索引(在此示例中为foreacha[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);
}

符合预期。