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); // falsePhươ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.
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:
- Đọc một chuỗi đầu vào đại diện cho tên công thức
- Đọ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") - Đọ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") - Tạo một tập hợp các nguyên liệu có sẵn trong tủ đựng thức ăn
- 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 - 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 availableNế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");
}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
1Thao tác nâng cao với danh sách
Thuộc tính danh sách: đầu và cuốiTrạng thái danh sách: isEmpty và isNotEmpĐảo ngược danh sáchThêm vào danh sách: insertXóa khỏi danh sách: removeWhereTìm trong danh sách: indexOfSắp xếp danh sáchXáo trộn danh sáchÔn tập: trình sắp xếp danh sách4Thao tác nâng cao với Map
Duyệt qua MapKiểm tra khóa và giá trịCác thuộc tính của Map: khóa và giá trịThêm có điều kiện: putIfAbsentXóa mục khỏi MapMap lồng nhauÔn tập: Cập nhật kho hàng2Thao tác hàm trên danh sách
Biến đổi bằng 'map'Lọc bằng 'where'Dùng '.toList()'Kiểm tra điều kiện bằng 'any'Điều kiện với 'every'Tìm phần tử bằng 'firstWhere'Ôn tập: lọc dữ liệu5Dự án: Tính tiền giỏ hàng
Thiết lập dự ánThêm mặt hàng vào giỏ8Dự án: Trình phân tích văn bản đơn giản
Tổng quan và thiết lập dự ánĐếm ký tự3Tập hợp
Tập hợp là gì?Tạo tập hợpThêm và xóa phần tử khỏi tập hợpKiểm tra phần tử trong tập hợpChuyển danh sách thành tập hợpPhép hợp của các tập hợpPhép giao của các tập hợpPhép hiệu của các tập hợpÔn tập: danh sách khách mời không trùng lặpTự luyện tập: Trình biên dịch Dart online