Ôn tập: danh sách khách mời không trùng lặ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 25 trên 65.
Thử thách
DễTạo một chương trình quản lý hệ thống lên kế hoạch sự kiện bằng cách phân tích danh sách khách mời từ hai nguồn thiệp mời khác nhau. Chương trình cần:
- Đọc một chuỗi đầu vào đại diện cho tên sự kiện
- Đọc nhiều chuỗi đầu vào đại diện cho khách mời trong danh sách thiệp mời thứ nhất (đầu vào kết thúc khi bạn nhận được
"list1_done") - Đọc nhiều chuỗi đầu vào đại diện cho khách mời trong danh sách thiệp mời thứ hai (đầu vào kết thúc khi bạn nhận được
"list2_done") - Chuyển cả hai danh sách khách mời thành tập hợp để tự động xử lý các phần tử trùng lặp trong mỗi danh sách
- Dùng phương thức
union()để tìm tất cả khách mời duy nhất được mời tham dự sự kiện - Dùng phương thức
intersection()để tìm khách mời có tên trong cả hai danh sách thiệp mời - Dùng phương thức
difference()để tìm khách mời chỉ có tên trong danh sách thiệp mời thứ nhất - In kết quả phân tích danh sách khách mời theo đúng định dạng bên dưới
Ví dụ, nếu tên sự kiện là "Birthday Party", danh sách thứ nhất có "Alice", "Bob", "Charlie", "Diana", còn danh sách thứ hai có "Bob", "Diana", "Eve", "Frank", chương trình của bạn sẽ in ra:
Event: Birthday Party
First invitation list: {Alice, Bob, Charlie, Diana}
Second invitation list: {Bob, Diana, Eve, Frank}
All unique guests: {Alice, Bob, Charlie, Diana, Eve, Frank}
Guests on both lists: {Bob, Diana}
Guests only on first list: {Alice, Charlie}
Total unique guests: 6
Duplicate invitations: 2
First list only: 2
Status: Guest list analysis completedNếu tên sự kiện là "Wedding Reception", danh sách thứ nhất có "John", "Mary", "Sarah", còn danh sách thứ hai có "Tom", "Lisa", "Mike", chương trình của bạn sẽ in ra:
Event: Wedding Reception
First invitation list: {John, Mary, Sarah}
Second invitation list: {Tom, Lisa, Mike}
All unique guests: {John, Mary, Sarah, Tom, Lisa, Mike}
Guests on both lists: {}
Guests only on first list: {John, Mary, Sarah}
Total unique guests: 6
Duplicate invitations: 0
First list only: 3
Status: Guest list analysis completedNếu tên sự kiện là "Company Meeting", danh sách thứ nhất có "Alex", "Jordan", "Taylor", "Morgan", "Alex", còn danh sách thứ hai có "Jordan", "Taylor", "Casey", "Jordan", chương trình của bạn sẽ in ra:
Event: Company Meeting
First invitation list: {Alex, Jordan, Taylor, Morgan}
Second invitation list: {Jordan, Taylor, Casey}
All unique guests: {Alex, Jordan, Taylor, Morgan, Casey}
Guests on both lists: {Jordan, Taylor}
Guests only on first list: {Alex, Morgan}
Total unique guests: 5
Duplicate invitations: 2
First list only: 2
Status: Guest list analysis completedChương trình của bạn phải thể hiện cả ba phép toán trên tập hợp: union() để kết hợp tất cả khách mời, intersection() để tìm khách mời có tên trong cả hai danh sách và difference() để tìm khách mời chỉ có tên trong danh sách thứ nhất. Trước tiên, hãy chuyển các danh sách đầu vào thành tập hợp để xử lý các phần tử trùng lặp trong từng danh sách, sau đó thực hiện các phép toán trên tập hợp để phân tích cách phân bố khách mời.
Tự làm thử
import 'dart:io';
void main() {
// Đọc tên sự kiện
String? eventName = stdin.readLineSync();
// Đọc danh sách khách mời thứ nhất
List<String> firstList = [];
String? input;
while ((input = stdin.readLineSync()) != "list1_done") {
if (input != null) {
firstList.add(input);
}
}
// Đọc danh sách khách mời thứ hai
List<String> secondList = [];
while ((input = stdin.readLineSync()) != "list2_done") {
if (input != null) {
secondList.add(input);
}
}
// Chuyển các danh sách thành tập hợp
Set<String> firstSet = firstList.toSet();
Set<String> secondSet = secondList.toSet();
// TODO: Viết code của bạn bên dưới
// Dùng các phương thức union(), intersection() và difference() để phân tích danh sách khách mời
// Tính tất cả khách mời không trùng lặp, khách mời có trong cả hai danh sách và khách mời chỉ có trong danh sách thứ nhất
// In kết quả theo định dạng yêu cầu
print("Event: $eventName");
print("First invitation list: $firstSet");
print("Second invitation list: $secondSet");
// Thêm các câu lệnh in ra còn lại tại đây
}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