Menu
CoddyTech

Toán học: hiệu tập hợp

Thuộc phần Logic và luồng chương trình trong hành trình C# của Coddy. Bài học 64 trên 66.

Phép hiệu tập hợp (set difference) tạo ra một tập hợp mới gồm các phần tử có trong tập hợp thứ nhất nhưng không có trong tập hợp thứ hai.

Tạo hai HashSet:

HashSet<string> set1 = new HashSet<string>();
HashSet<string> set2 = new HashSet<string>();

Thêm phần tử vào cả hai tập hợp:

set1.Add("Apple");
set1.Add("Banana");
set1.Add("Cherry");

set2.Add("Banana");
set2.Add("Kiwi");

Tính hiệu (các phần tử có trong set1 nhưng không có trong set2):

HashSet<string> difference = new HashSet<string>(set1);
difference.ExceptWith(set2);

Sau khi chạy đoạn code trên, tập hợp hiệu sẽ chứa:

["Apple", "Cherry"]
challenge icon

Thử thách

Dễ

Tạo một phương thức tên là GetSetDifference nhận hai HashSet số nguyên (set1 và set2) rồi trả về một HashSet mới chứa hiệu của hai tập hợp (các phần tử có trong set1 nhưng không có trong set2).

Tự làm thử

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

class Program {
    public static HashSet<int> GetSetDifference(HashSet<int> set1, HashSet<int> set2) {
        // Viết code của bạn ở đây
        return null;
    }
    
    static void Main(string[] args) {
        // Đọc dòng đầu tiên cho tập hợp thứ nhất
        string line1 = Console.ReadLine();
        HashSet<int> set1 = new HashSet<int>();
        
        // Kiểm tra tập hợp thứ nhất có ở định dạng mảng JSON không
        if (line1 != null && line1.StartsWith("[") && line1.EndsWith("]")) {
            try {
                // Lấy nội dung giữa hai dấu ngoặc vuông
                string arrayContent = line1.Substring(1, line1.Length - 2);
                
                // Thử phân tích nội dung mảng JSON
                string[] values = Regex.Split(arrayContent, @",\s*");
                foreach (string value in values) {
                    // Xóa dấu ngoặc kép nếu có
                    string cleanValue = value.Trim();
                    if (cleanValue.StartsWith("\"") && cleanValue.EndsWith("\"")) {
                        cleanValue = cleanValue.Substring(1, cleanValue.Length - 2);
                    }
                    
                    // Chuyển thành số nguyên rồi thêm vào tập hợp
                    if (int.TryParse(cleanValue, out int num)) {
                        set1.Add(num);
                    }
                }
            }
            catch (Exception ex) {
                Console.WriteLine($"Error parsing first set: {ex.Message}");
                return;
            }
        }
        else {
            // Xử lý đầu vào phân tách bằng dấu cách cho tập hợp thứ nhất
            string[] set1Input = line1.Split(' ');
            foreach (string item in set1Input) {
                if (int.TryParse(item, out int num)) {
                    set1.Add(num);
                }
            }
        }
        
        // Đọc dòng thứ hai cho tập hợp thứ hai
        string line2 = Console.ReadLine();
        HashSet<int> set2 = new HashSet<int>();
        
        // Kiểm tra tập hợp thứ hai có ở định dạng mảng JSON không
        if (line2 != null && line2.StartsWith("[") && line2.EndsWith("]")) {
            try {
                // Lấy nội dung giữa hai dấu ngoặc vuông
                string arrayContent = line2.Substring(1, line2.Length - 2);
                
                // Thử phân tích nội dung mảng JSON
                string[] values = Regex.Split(arrayContent, @",\s*");
                foreach (string value in values) {
                    // Xóa dấu ngoặc kép nếu có
                    string cleanValue = value.Trim();
                    if (cleanValue.StartsWith("\"") && cleanValue.EndsWith("\"")) {
                        cleanValue = cleanValue.Substring(1, cleanValue.Length - 2);
                    }
                    
                    // Chuyển thành số nguyên rồi thêm vào tập hợp
                    if (int.TryParse(cleanValue, out int num)) {
                        set2.Add(num);
                    }
                }
            }
            catch (Exception ex) {
                Console.WriteLine($"Error parsing second set: {ex.Message}");
                return;
            }
        }
        else {
            // Xử lý đầu vào phân tách bằng dấu cách cho tập hợp thứ hai
            string[] set2Input = line2.Split(' ');
            foreach (string item in set2Input) {
                if (int.TryParse(item, out int num)) {
                    set2.Add(num);
                }
            }
        }
        
        HashSet<int> difference = GetSetDifference(set1, set2);
        
        // In kết quả
        List<int> sortedResult = new List<int>(difference);
        sortedResult.Sort();
        foreach (int item in sortedResult) {
            Console.WriteLine(item);
        }
    }
}
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 chương trình

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