【问题标题】:Functional programming functions using 2 lists in D在 D 中使用 2 个列表的函数式编程函数
【发布时间】:2019-05-31 14:09:16
【问题描述】:

如果我有 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个list的对应元素相乘?

感谢您的洞察力。

【问题讨论】:

    标签: functional-programming d


    【解决方案1】:

    关键是在应用mapforeach 之前,使用zip 将两个列表的元素(或在D 中已知的dynamic arrays)组合成一个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]
    

    正如预期的那样。

    【讨论】:

      猜你喜欢
      • 2011-08-14
      • 2012-05-28
      • 2019-02-12
      • 2022-11-30
      • 2010-09-06
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多