代码之家  ›  专栏  ›  技术社区  ›  rnso

在D中使用2个列表的函数编程函数

  •  0
  • rnso  · 技术社区  · 5 年前

    如果我有两个列表:

    list1 = [1, 2, 3, 4];
    list2 = [10, 25, 35, 58];
    

    我想得到一个列表,它有两个列表的对应元素的乘积;

    在Python中可以执行以下操作:

    outlist = list(map(lambda a,b: a*b, list1, list2))
    

    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); 
    }
    

    我的问题是:

    问题1:两个列表都可以作为foreach的参数吗?

    问题2:如何使用映射函数将两个列表的对应元素相乘?

    谢谢你的洞察力。

    0 回复  |  直到 5 年前
        1
  •  6
  •   user272735    5 年前

    关键是使用 zip dynamic arrays tuples 申请前 map foreach 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]