【问题标题】:How to add two values from list in dart如何从飞镖列表中添加两个值
【发布时间】:2022-01-20 19:48:10
【问题描述】:

这是比萨饼价格列表

  const pizzaPrices = {
    'margherita': 5.5,
    'pepperoni': 7.5,
    'vegetarian': 6.5,
  };

如何计算给定订单的总数。 如果是玛格丽塔和意大利辣香肠,那么应该是 13 美元。

const order = ['margherita', 'pepperoni'];

如何添加到列表中

【问题讨论】:

    标签: list flutter dart


    【解决方案1】:
      const pizzaPrices = {
        'margherita': 5.5,
        'pepperoni': 7.5,
        'vegetarian': 6.5,
      };
      const order = ['margherita', 'pepperoni'];
      var total=0.0;
      order.forEach((item){
        total+=pizzaPrices[item]??0.0;  
      });
      print("Total : "+total.toString());
    

    【讨论】:

    • 这里的if 声明是不必要的。将if 的主体移动到forEach 回调中,并完全摆脱if
    • 好吧,编辑后,我觉得很好。
    【解决方案2】:

    有几种方法可以计算总数。一种方法是使用fold:

    final total =
        order.fold<double>(0.0, (prev, elem) => prev + pizzaPrices[elem]!);
    

    另一种方法是遍历订单并命令式地将总数相加:

    var total = 0.0;
    for (final elem in order) {
      total += pizzaPrices[elem]!;
    }
    

    为了添加到您的列表中,您可以调用列表中的add 方法:

    order.add('vegetarian');
    

    但是,const 列表无法修改,因此您必须将 order 更改为声明为 finalvar

    final order = ['margherita', 'pepperoni'];
    

    【讨论】:

      【解决方案3】:

      因此,如果您使用它,则不必定义自己的 ```fold`` 函数。

      var sum = [1, 2, 3].reduce((a, b) => a + b);
      

      您可以访问此以获得更多信息,https://github.com/dart-lang/sdk/issues/1649

      或者

      num sum = 0;
      for (num e in [1,2,3]) {
        sum += e;
      }
      

      【讨论】:

      • 我建议不要使用reduce 来支持fold。原因是,reduce 在集合为空时会抛出异常。想象一下,如果您想在客户选择商品时显示订单的成本,订单一开始会是空的,如果您没有额外的代码来处理这种情况,这将导致异常。
      【解决方案4】:
        const pizzaPrices = {
          'margherita': 5.5,
          'pepperoni': 7.5,
          'vegetarian': 6.5,
        };
        const order = ['margherita', 'pepperoni'];
        
        var total=0.0;
        order.forEach((item){
           pizzaPrices.forEach((name,price){
             if(name==item){
               total=total+price;
             }
           });
        });
        
        print("Total : "+total.toString());
        
      

      【讨论】:

      • 这不能有效地利用地图。而不是使用foreach 循环遍历每个映射条目,只需使用item 变量将[] 下标到pizzaPrices 映射中。
      • 是的,你是对的,请检查我的第二个答案
      【解决方案5】:
      void main() {
        const pizzaPrices = {
          'margherita': 5.5,
          'pepperoni': 7.5,
          'vegetarian': 6.5,
        };
      
        var x = pizzaPrices['margherita'];
        var y = pizzaPrices['pepperoni'];
      
        List xy = [];
      
        xy.add(x);
        xy.add(y);
      
        double somme = 0;
      
        xy.forEach((var element) => somme += element);
      
        print(somme);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-14
        • 2018-10-15
        相关资源
        最近更新 更多