Menu
CoddyTech

Kiểm tra phần tử trong tập hợp

Thuộc phần Logic và luồng điều khiển trong hành trình Dart của Coddy. Bài học 20 trên 65.

Khi làm việc với Set, bạn thường cần kiểm tra xem một phần tử cụ thể có trong tập hợp hay không. Phương thức contains() giúp bạn kiểm tra đơn giản và hiệu quả, trả về true nếu tìm thấy phần tử và false nếu không tìm thấy.

Một trong những ưu điểm chính của việc dùng contains() với Set là hiệu năng vượt trội. Khác với việc tìm kiếm trong List, khi bạn có thể phải kiểm tra từng phần tử một, các thao tác của Set được tối ưu để tra cứu nhanh, giúp contains() hoạt động rất hiệu quả ngay cả với tập hợp lớn.

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

// Kiểm tra xem có những nguyên liệu cụ thể không
bool hasFlour = ingredients.contains('flour');
bool hasMilk = ingredients.contains('milk');

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

Phương thức (method) này đặc biệt hữu ích khi bạn cần xác thực dữ liệu, kiểm tra điều kiện tiên quyết hoặc lọc thông tin dựa trên việc một phần tử có thuộc một tập hợp cụ thể hay không. Kết quả boolean rất phù hợp để dùng trong câu lệnh điều kiện và các phép toán logic.

challenge icon

Thử thách

Dễ

Tạo một chương trình quản lý hệ thống xác thực công thức nấu ăn bằng cách kiểm tra xem các nguyên liệu cụ thể có sẵn trong tủ đựng thức ăn hay không. Chương trình của bạn cần:

  1. Đọc một chuỗi đầu vào đại diện cho tên công thức
  2. Đọc nhiều chuỗi đầu vào đại diện cho các nguyên liệu có sẵn trong tủ đựng thức ăn (đầu vào sẽ kết thúc khi bạn nhận được "pantry_done")
  3. Đọc nhiều chuỗi đầu vào đại diện cho các nguyên liệu cần có trong công thức (đầu vào sẽ kết thúc khi bạn nhận được "recipe_done")
  4. Tạo một tập hợp các nguyên liệu có sẵn trong tủ đựng thức ăn
  5. Dùng phương thức contains() để kiểm tra xem từng nguyên liệu cần có có trong tủ đựng thức ăn hay không
  6. In ra kết quả xác thực công thức theo chính xác định dạng bên dưới

Ví dụ, nếu tên công thức là "Chocolate Chip Cookies", các nguyên liệu trong tủ đựng thức ăn là "flour", "sugar", "eggs", "butter", "vanilla", và các nguyên liệu cần có là "flour", "sugar", "chocolate chips", "butter", chương trình của bạn sẽ in ra:

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)

Nếu tên công thức là "Scrambled Eggs", các nguyên liệu trong tủ đựng thức ăn là "eggs", "butter", "salt", "pepper", và các nguyên liệu cần có là "eggs", "butter", "salt", chương trình của bạn sẽ in ra:

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

Nếu tên công thức là "Fruit Salad", các nguyên liệu trong tủ đựng thức ăn là "apples", "bananas", và các nguyên liệu cần có là "apples", "oranges", "grapes", "honey", chương trình của bạn sẽ in ra:

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)

Chương trình của bạn phải dùng phương thức contains() để kiểm tra từng nguyên liệu cần có với tập hợp nguyên liệu trong tủ đựng thức ăn. Lưu các nguyên liệu cần có trong một danh sách để giữ thứ tự kiểm tra, đồng thời thu thập các nguyên liệu còn thiếu vào một danh sách riêng. Nếu có đủ tất cả nguyên liệu, hãy hiển thị "Ready to cook - all ingredients available" làm trạng thái. Nếu thiếu nguyên liệu, hãy hiển thị "Cannot make recipe - missing X ingredient(s)", trong đó X là số lượng nguyên liệu còn thiếu.

Tự làm thử

import 'dart:io';

void main() {
  // Đọc tên món ăn
  String? recipeName = stdin.readLineSync();
  
  // Đọc các nguyên liệu có sẵn đến khi gặp "pantry_done"
  Set<String> pantryIngredients = <String>{};
  String? pantryInput;
  while ((pantryInput = stdin.readLineSync()) != "pantry_done") {
    if (pantryInput != null) {
      pantryIngredients.add(pantryInput);
    }
  }
  
  // Đọc các nguyên liệu cần dùng đến khi gặp "recipe_done"
  List<String> requiredIngredients = <String>[];
  String? recipeInput;
  while ((recipeInput = stdin.readLineSync()) != "recipe_done") {
    if (recipeInput != null) {
      requiredIngredients.add(recipeInput);
    }
  }
  
  // TODO: Viết code của bạn bên dưới
  // Dùng pantryIngredients.contains() để kiểm tra từng nguyên liệu cần dùng
  // Tạo danh sách (list) để lưu các nguyên liệu còn thiếu
  // Kiểm tra nguyên liệu nào có sẵn và in kết quả theo định dạng yêu cầu
  
  // In kết quả (thay bằng phần code bạn viết)
  print("Recipe: $recipeName");
  print("Pantry ingredients: $pantryIngredients");
  print("Required ingredients: $requiredIngredients");
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch Dart online