Phép hợp của các 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 22 trên 65.
Khi có hai tập hợp Set riêng biệt, bạn có thể kết hợp chúng thành một tập hợp duy nhất chứa tất cả phần tử duy nhất từ cả hai bằng phương thức union(). Thao tác này tạo một tập hợp mới gồm mọi phần tử xuất hiện trong một trong hai tập hợp ban đầu.
Phương thức union() tự động xử lý các phần tử trùng lặp cho bạn. Nếu cùng một phần tử có trong cả hai tập hợp, phần tử đó sẽ chỉ xuất hiện một lần trong tập hợp hợp nhất, giữ nguyên tính chất cơ bản là tập hợp chỉ chứa các giá trị duy nhất.
Set<String> frontendSkills = {'HTML', 'CSS', 'JavaScript'};
Set<String> backendSkills = {'JavaScript', 'Python', 'SQL'};
Set<String> allSkills = frontendSkills.union(backendSkills);
print(allSkills); // {HTML, CSS, JavaScript, Python, SQL}Hãy chú ý rằng 'JavaScript' xuất hiện trong cả hai tập hợp ban đầu nhưng chỉ xuất hiện một lần trong kết quả phép hợp. Vì vậy, union() rất phù hợp để kết hợp các tập hợp có liên quan mà vẫn đảm bảo không có phần tử trùng lặp, chẳng hạn như gộp các tập hợp kỹ năng, kết hợp quyền của người dùng hoặc hợp nhất dữ liệu từ nhiều nguồn.
Để tìm các phần tử xuất hiện trong cả hai tập hợp, hãy dùng phương thức intersection(). Phương thức này trả về một tập hợp mới chỉ chứa các phần tử chung:
Set<String> sharedSkills = frontendSkills.intersection(backendSkills);
print(sharedSkills); // {JavaScript}Khi đã có tập hợp các phần tử giao nhau, bạn có thể chuyển nó thành chuỗi dễ đọc bằng phương thức join(). Cách này hoạt động giống như với List. Phương thức này ghép tất cả phần tử thành một chuỗi duy nhất với dấu phân cách mà bạn cung cấp:
Set<String> overlap = frontendSkills.intersection(backendSkills);
String result = overlap.isEmpty ? 'None' : overlap.join(', ');
print(result); // JavaScriptKết hợp lại, union(), intersection() và join() cung cấp cho bạn những công cụ mạnh mẽ để so sánh và hiển thị dữ liệu tập hợp, chẳng hạn như kết hợp các kỹ năng của các nhóm và xác định những kỹ năng họ đã có chung.
Thử thách
DễTạo chương trình quản lý hệ thống kết nối nghề nghiệp bằng cách kết hợp các tập hợp kỹ năng của những thành viên khác nhau trong nhóm để tạo hồ sơ kỹ năng toàn diện cho dự án. Chương trình của bạn cần:
- Đọc một đầu vào chuỗi biểu thị tên dự án
- Đọc nhiều đầu vào chuỗi biểu thị kỹ năng của thành viên thứ nhất trong nhóm (đầu vào kết thúc khi bạn nhận được
"member1_done") - Đọc nhiều đầu vào chuỗi biểu thị kỹ năng của thành viên thứ hai trong nhóm (đầu vào kết thúc khi bạn nhận được
"member2_done") - Tạo hai tập hợp riêng để lưu kỹ năng của từng thành viên trong nhóm
- Dùng phương thức
union()để kết hợp hai tập hợp kỹ năng thành một hồ sơ kỹ năng toàn diện cho dự án - In kết quả kết hợp kỹ năng theo đúng định dạng bên dưới
Ví dụ, nếu tên dự án là "Web Development Project", kỹ năng của thành viên thứ nhất là "HTML", "CSS", "JavaScript", "React", và kỹ năng của thành viên thứ hai là "JavaScript", "Node.js", "MongoDB", "React", chương trình của bạn cần in ra:
Project: Web Development Project
Team Member 1 skills: {HTML, CSS, JavaScript, React}
Team Member 2 skills: {JavaScript, Node.js, MongoDB, React}
Combined project skills: {HTML, CSS, JavaScript, React, Node.js, MongoDB}
Total unique skills available: 6
Overlapping skills: JavaScript, React
Status: Project skill profile created successfullyNếu tên dự án là "Mobile App Development", kỹ năng của thành viên thứ nhất là "Dart", "Flutter", "Firebase", và kỹ năng của thành viên thứ hai là "Swift", "iOS", "Xcode", chương trình của bạn cần in ra:
Project: Mobile App Development
Team Member 1 skills: {Dart, Flutter, Firebase}
Team Member 2 skills: {Swift, iOS, Xcode}
Combined project skills: {Dart, Flutter, Firebase, Swift, iOS, Xcode}
Total unique skills available: 6
Overlapping skills: None
Status: Project skill profile created successfullyNếu tên dự án là "Data Science Project", kỹ năng của thành viên thứ nhất là "Python", "Pandas", "NumPy", "SQL", và kỹ năng của thành viên thứ hai là "Python", "SQL", "Tableau", "Statistics", chương trình của bạn cần in ra:
Project: Data Science Project
Team Member 1 skills: {Python, Pandas, NumPy, SQL}
Team Member 2 skills: {Python, SQL, Tableau, Statistics}
Combined project skills: {Python, Pandas, NumPy, SQL, Tableau, Statistics}
Total unique skills available: 6
Overlapping skills: Python, SQL
Status: Project skill profile created successfullyChương trình của bạn phải dùng phương thức union() để kết hợp hai tập hợp kỹ năng, qua đó thể hiện cách phương thức này tự động xử lý các phần tử trùng lặp. Trước tiên, hãy hiển thị từng tập hợp kỹ năng riêng, sau đó hiển thị kết quả kết hợp. Xác định những kỹ năng trùng nhau bằng cách tìm các kỹ năng xuất hiện trong cả hai tập hợp ban đầu. Nếu không có kỹ năng nào trùng nhau, hãy hiển thị "None" trên dòng kỹ năng trùng nhau.
Tự làm thử
import 'dart:io';
void main() {
// Đọc tên dự án
String? projectName = stdin.readLineSync();
// Đọc các kỹ năng của thành viên đầu tiên trong nhóm
Set<String> member1Skills = <String>{};
String? skill;
while ((skill = stdin.readLineSync()) != "member1_done") {
if (skill != null) {
member1Skills.add(skill);
}
}
// Đọc các kỹ năng của thành viên thứ hai trong nhóm
Set<String> member2Skills = <String>{};
while ((skill = stdin.readLineSync()) != "member2_done") {
if (skill != null) {
member2Skills.add(skill);
}
}
// TODO: Viết code của bạn bên dưới
// Dùng phương thức union() để kết hợp hai tập hợp kỹ năng
// Tìm các kỹ năng trùng nhau giữa hai tập hợp
// Tính tổng số kỹ năng không trùng lặp
// In kết quả theo định dạng yêu cầu
print("Project: $projectName");
print("Team Member 1 skills: $member1Skills");
print("Team Member 2 skills: $member2Skills");
// In các kỹ năng đã kết hợp, tổng số kỹ năng, các kỹ năng trùng nhau và trạng thái
}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