【发布时间】:2022-01-20 19:48:10
【问题描述】:
这是比萨饼价格列表
const pizzaPrices = {
'margherita': 5.5,
'pepperoni': 7.5,
'vegetarian': 6.5,
};
如何计算给定订单的总数。 如果是玛格丽塔和意大利辣香肠,那么应该是 13 美元。
const order = ['margherita', 'pepperoni'];
如何添加到列表中
【问题讨论】:
这是比萨饼价格列表
const pizzaPrices = {
'margherita': 5.5,
'pepperoni': 7.5,
'vegetarian': 6.5,
};
如何计算给定订单的总数。 如果是玛格丽塔和意大利辣香肠,那么应该是 13 美元。
const order = ['margherita', 'pepperoni'];
如何添加到列表中
【问题讨论】:
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。
有几种方法可以计算总数。一种方法是使用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 更改为声明为 final 或 var:
final order = ['margherita', 'pepperoni'];
【讨论】:
因此,如果您使用它,则不必定义自己的 ```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 在集合为空时会抛出异常。想象一下,如果您想在客户选择商品时显示订单的成本,订单一开始会是空的,如果您没有额外的代码来处理这种情况,这将导致异常。
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 映射中。
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);
}
【讨论】: