Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Kiểm tra HashSet và tập hợp có chứa cùng phần tử trong C#

Giới thiệu

Phương thức SetEquals(IEnumerable<T>) của HashSet<T> kiểm tra xem hai tập hợp có chứa chính xác cùng các phần tử hay không (bỏ qua thứ tự và trùng lặp). Trả về true nếu bằng nhau.

Ví dụ 1: Hai HashSet khác nhau

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        HashSet<string> set1 = new HashSet<string>();
        set1.Add("One");
        set1.Add("Two");
        set1.Add("Three");
        set1.Add("Four");
        set1.Add("Five");
        set1.Add("Six");
        set1.Add("Seven");
        
        HashSet<string> set2 = new HashSet<string>();
        set2.Add("One");
        set2.Add("Two");
        set2.Add("Three");
        set2.Add("Four");
        
        Console.WriteLine("Does it contain the same elements? = " + set1.SetEquals(set2));
    }
}

Kết quả

Does it contain the same elements? = False

Ví dụ 2: Hai HashSet giống nhau

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        HashSet<int> set1 = new HashSet<int>();
        set1.Add(100);
        set1.Add(200);
        set1.Add(300);
        set1.Add(400);
        set1.Add(500);
        set1.Add(600);
        
        HashSet<int> set2 = new HashSet<int>();
        set2.Add(100);
        set2.Add(200);
        set2.Add(300);
        set2.Add(400);
        set2.Add(500);
        set2.Add(600);
        
        Console.WriteLine("Does it contain the same elements? = " + set1.SetEquals(set2));
    }
}

Kết quả

Does it contain the same elements? = True

Đặc điểm SetEquals()

  • So sánh tập hợp (set equality): cùng phần tử, bỏ qua thứ tự và số lần xuất hiện
  • Phức tạp: O(n) - duyệt tập hợp nhỏ hơn
  • Chấp nhận bất kỳ IEnumerable<T>
  • Không thay đổi tập hợp gốc

So sánh các phương thức so sánh tập hợp

Phương thức Ý nghĩa Ví dụ A={1,2,3}, B={2,3,4}
SetEquals A = B (cùng phần tử) False
Overlaps A ∩ B ≠ ∅ True
IsSubsetOf A ⊆ B False
IsSupersetOf A ⊇ B False
IsProperSubsetOf A ⊂ B False
IsProperSupersetOf A ⊃ B False