数组和求和中的条件过滤
conditional filtering in array and sum
在下面的代码中,我得到了三种基于 13 岁的饮料。我想根据年龄过滤该列表,如果年龄小于 15 岁,它应该只显示不含酒精的饮料以及如何使用for循环根据相同条件计算项目的总和。
谢谢!您可以在 dartPad
上 运行 此代码
class Drink {
final int id;
final String? name;
final int? price;
final bool isAlchol;
Drink(this.id, this.name, this.price, this.isAlchol);
}
void main() {
final List<Drink> beverage = [
Drink(1, 'cola', 2, false),
Drink(2, 'fanta', 3, false),
Drink(3, 'coctail', 5, true),
Drink(4, 'beer', 5, true),
];
final userAge = 15;
final userSelectedDrinkList = [1, 2, 3];
final paidCash = 20;
void getNewDrink(List<int> itemList, int age, int cash) {
final userDrinks =
beverage.where((drink) => itemList.contains(drink.id)).toList();
for (final drink in userDrinks) {
print(drink.name);
}
}
getNewDrink(userSelectedDrinkList, userAge, paidCash);
}
以下是一些可以帮助您的功能。
要过滤列表并删除含酒精的饮料:
List<Drink> getDrinksWithoutAlcohol(List<Drink> initialList) {
return initialList.where((drink) => !drink.isAlchol).toList();
}
在 for 循环中获取饮料列表的总价
int getTotalPrice(List<Drink> listDrinks) {
int price = 0;
for(Drink drink in listDrinks) {
price += drink.price ?? 0;
}
return price;
}
并且根据您提供的代码,如果您想根据用户的年龄有条件地过滤您的列表,您可以执行以下操作
final finalList = userAge < 15 ? getDrinksWithoutAlcohol(userDrinks) : userDrinks;
您可以稍微调整一下代码.. 像这样:
void getNewDrink(List<int> itemList, int age, int cash) {
final userDrinks = beverage
.where((drink) => itemList.contains(drink.id))
.where((drink) => age >= 15 || !drink.isAlchol)
.toList();
final sum = userDrinks.map((drink) => drink.price).reduce((value, element) => (value ?? 0) + (element ?? 0));
print(sum);
var anotherSum = 0;
for (final drink in userDrinks) {
print(drink.name);
anotherSum += drink.price ?? 0;
}
print(anotherSum);
}
在下面的代码中,我得到了三种基于 13 岁的饮料。我想根据年龄过滤该列表,如果年龄小于 15 岁,它应该只显示不含酒精的饮料以及如何使用for循环根据相同条件计算项目的总和。
谢谢!您可以在 dartPad
上 运行 此代码class Drink {
final int id;
final String? name;
final int? price;
final bool isAlchol;
Drink(this.id, this.name, this.price, this.isAlchol);
}
void main() {
final List<Drink> beverage = [
Drink(1, 'cola', 2, false),
Drink(2, 'fanta', 3, false),
Drink(3, 'coctail', 5, true),
Drink(4, 'beer', 5, true),
];
final userAge = 15;
final userSelectedDrinkList = [1, 2, 3];
final paidCash = 20;
void getNewDrink(List<int> itemList, int age, int cash) {
final userDrinks =
beverage.where((drink) => itemList.contains(drink.id)).toList();
for (final drink in userDrinks) {
print(drink.name);
}
}
getNewDrink(userSelectedDrinkList, userAge, paidCash);
}
以下是一些可以帮助您的功能。
要过滤列表并删除含酒精的饮料:
List<Drink> getDrinksWithoutAlcohol(List<Drink> initialList) {
return initialList.where((drink) => !drink.isAlchol).toList();
}
在 for 循环中获取饮料列表的总价
int getTotalPrice(List<Drink> listDrinks) {
int price = 0;
for(Drink drink in listDrinks) {
price += drink.price ?? 0;
}
return price;
}
并且根据您提供的代码,如果您想根据用户的年龄有条件地过滤您的列表,您可以执行以下操作
final finalList = userAge < 15 ? getDrinksWithoutAlcohol(userDrinks) : userDrinks;
您可以稍微调整一下代码.. 像这样:
void getNewDrink(List<int> itemList, int age, int cash) {
final userDrinks = beverage
.where((drink) => itemList.contains(drink.id))
.where((drink) => age >= 15 || !drink.isAlchol)
.toList();
final sum = userDrinks.map((drink) => drink.price).reduce((value, element) => (value ?? 0) + (element ?? 0));
print(sum);
var anotherSum = 0;
for (final drink in userDrinks) {
print(drink.name);
anotherSum += drink.price ?? 0;
}
print(anotherSum);
}