Menu
CoddyTech

Toán học: phép hợp của HashSet

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 62 trên 66.

Phép hợp kết hợp hai tập hợp để tạo một tập hợp mới chứa tất cả phần tử từ cả hai tập hợp mà không có phần tử trùng lặp.

Tạo hai HashSet:

HashSet<int> set1 = new HashSet<int>() { 1, 2, 3 };
HashSet<int> set2 = new HashSet<int>() { 3, 4, 5 };

Dùng phương thức Union để kết hợp các tập hợp:

HashSet<int> unionSet = new HashSet<int>(set1);
unionSet.UnionWith(set2);

Sau khi chạy đoạn code trên, unionSet chứa:

[1, 2, 3, 4, 5]

Lưu ý rằng phần tử 3 chỉ xuất hiện một lần trong kết quả vì HashSet không cho phép phần tử trùng lặp.

challenge icon

Thử thách

Dễ

Tạo một phương thức tên là UnionSets, nhận hai HashSet số nguyên làm tham số và trả về một HashSet mới chứa hợp của hai tập hợp.

Phần đọc đầu vào và in đầu ra đã được xử lý sẵn: hãy tập trung triển khai phần thân của phương thức UnionSets.

Tự làm thử

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

class Program
{
    public static HashSet<int> UnionSets(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 để kiểm tra định dạng của tập hợp thứ nhất
        string line1 = Console.ReadLine();
        HashSet<int> set1 = new HashSet<int>();
        
        // Kiểm tra xem 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 của tập hợp thứ nhất
            string[] input1 = line1.Split(' ');
            foreach (string num in input1)
            {
                if (int.TryParse(num, out int parsedNum))
                {
                    set1.Add(parsedNum);
                }
            }
        }
        
        // Đọc dòng thứ hai để kiểm tra định dạng của tập hợp thứ hai
        string line2 = Console.ReadLine();
        HashSet<int> set2 = new HashSet<int>();
        
        // Kiểm tra xem 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 của tập hợp thứ hai
            string[] input2 = line2.Split(' ');
            foreach (string num in input2)
            {
                if (int.TryParse(num, out int parsedNum))
                {
                    set2.Add(parsedNum);
                }
            }
        }
        
        // Lấy hợp của hai tập hợp và in ra kết quả
        HashSet<int> unionSet = UnionSets(set1, set2);
        Console.WriteLine(string.Join(" ", unionSet.OrderBy(x => x)));
    }
}
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