Menu
CoddyTech

检查集合中是否包含元素

本课属于 Coddy Dart 学习旅程的“逻辑与流程控制”单元。第 20 课,共 65 课。

使用 Set 时,你经常需要检查集合中是否存在某个特定元素。contains() 方法提供了一种简单高效的检查方式:如果找到该元素,就返回 true;如果没有找到,就返回 false。

使用 contains() 配合 Set 的一个主要优势是性能出色。与搜索 List 时可能需要逐个检查元素不同,Set 操作针对快速查找进行了优化,因此即使集合很大,contains() 也非常高效。

Set<String> ingredients = {'flour', 'sugar', 'eggs', 'butter'};

// 检查是否有指定的食材
bool hasFlour = ingredients.contains('flour');
bool hasMilk = ingredients.contains('milk');

print(hasFlour);  // true
print(hasMilk);   // false

当你需要验证数据、检查前置条件,或根据信息是否属于特定集合来筛选信息时,这个方法特别有用。布尔结果非常适合用于条件语句和逻辑运算。

challenge icon

挑战

简单

创建一个程序,通过检查厨房储藏室中是否有特定食材,来管理食谱验证系统。你的程序应当:

  1. 读取一个表示食谱名称的字符串输入
  2. 读取多个表示储藏室中现有食材的字符串输入(收到 "pantry_done" 时结束输入)
  3. 读取多个表示食谱所需食材的字符串输入(收到 "recipe_done" 时结束输入)
  4. 使用现有的储藏室食材创建一个集合
  5. 使用 contains() 方法检查储藏室中是否有每种所需食材
  6. 按照下方所示的准确格式打印食谱验证结果

例如,如果食谱名称是 "Chocolate Chip Cookies",储藏室中的食材是 "flour"、"sugar"、"eggs"、"butter"、"vanilla",所需食材是 "flour"、"sugar"、"chocolate chips"、"butter",你的程序应输出:

Recipe: Chocolate Chip Cookies
Pantry ingredients: {flour, sugar, eggs, butter, vanilla}
Required ingredients: [flour, sugar, chocolate chips, butter]
Checking ingredient availability:
- flour: Available
- sugar: Available
- chocolate chips: Missing
- butter: Available
Missing ingredients: [chocolate chips]
Status: Cannot make recipe - missing 1 ingredient(s)

如果食谱名称是 "Scrambled Eggs",储藏室中的食材是 "eggs"、"butter"、"salt"、"pepper",所需食材是 "eggs"、"butter"、"salt",你的程序应输出:

Recipe: Scrambled Eggs
Pantry ingredients: {eggs, butter, salt, pepper}
Required ingredients: [eggs, butter, salt]
Checking ingredient availability:
- eggs: Available
- butter: Available
- salt: Available
Missing ingredients: []
Status: Ready to cook - all ingredients available

如果食谱名称是 "Fruit Salad",储藏室中的食材是 "apples"、"bananas",所需食材是 "apples"、"oranges"、"grapes"、"honey",你的程序应输出:

Recipe: Fruit Salad
Pantry ingredients: {apples, bananas}
Required ingredients: [apples, oranges, grapes, honey]
Checking ingredient availability:
- apples: Available
- oranges: Missing
- grapes: Missing
- honey: Missing
Missing ingredients: [oranges, grapes, honey]
Status: Cannot make recipe - missing 3 ingredient(s)

你的程序必须使用 contains() 方法,将每种所需食材与储藏室集合进行比对。将所需食材存储在列表中,以保持检查顺序,并将缺少的食材收集到另一个列表中。如果所有食材都齐全,状态应显示 "Ready to cook - all ingredients available"。如果缺少任何食材,状态应显示 "Cannot make recipe - missing X ingredient(s)",其中 X 是缺少食材的数量。

亲手试试

import 'dart:io';

void main() {
  // 读取食谱名称
  String? recipeName = stdin.readLineSync();
  
  // 读取储藏室里的食材,直到读到 "pantry_done"
  Set<String> pantryIngredients = <String>{};
  String? pantryInput;
  while ((pantryInput = stdin.readLineSync()) != "pantry_done") {
    if (pantryInput != null) {
      pantryIngredients.add(pantryInput);
    }
  }
  
  // 读取所需食材,直到读到 "recipe_done"
  List<String> requiredIngredients = <String>[];
  String? recipeInput;
  while ((recipeInput = stdin.readLineSync()) != "recipe_done") {
    if (recipeInput != null) {
      requiredIngredients.add(recipeInput);
    }
  }
  
  // TODO:在下方编写你的代码
  // 使用 pantryIngredients.contains() 检查每种所需食材
  // 创建一个列表,存储缺少的食材
  // 检查食材是否齐全,并按要求的格式打印结果
  
  // 打印结果(替换为你的实现)
  print("Recipe: $recipeName");
  print("Pantry ingredients: $pantryIngredients");
  print("Required ingredients: $requiredIngredients");
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程控制中的所有课

自己练习: Dart 在线编译器