Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

การหาส่วนร่วมของ HashSet สองชุดใน C#

ภาพรวม

เมธอด HashSet<T>.IntersectWith(IEnumerable<T>) แปลง HashSet ให้เหลือเฉพาะสมาชิกที่ปรากฏใน ทั้งสองชุด (ส่วนร่วม) ทำงานแบบ in-place

ตัวอย่าง 1: HashSet สตริง

using System;
using System.Collections.Generic;

public class Demo {
    public static void Main() {
        HashSet set1 = new HashSet();
        set1.Add("AB");
        set1.Add("CD");
        set1.Add("EF");
        set1.Add("AB");
        set1.Add("IJ");
        set1.Add("KL");
        set1.Add("EF");
        set1.Add("OP");

        Console.WriteLine("Elements in HashSet1");
        foreach (string val in set1) {
            Console.WriteLine(val);
        }

        HashSet set2 = new HashSet();
        set2.Add("EF");
        set2.Add("KL");

        Console.WriteLine("\nElements in HashSet2");
        foreach (string val in set2) {
            Console.WriteLine(val);
        }

        Console.WriteLine("Count of elements in HashSet2 = " + set2.Count);
        set2.Remove("KL");
        Console.WriteLine("\nElements in HashSet2... (UPDATED)");
        foreach (string res in set2) {
            Console.WriteLine(res);
        }
        Console.WriteLine("Count of elements in HashSet2 (Updated) = " + set2.Count);

        Console.WriteLine("\nIs set1 a superset of set2? " + set1.IsSupersetOf(set2));
        set1.IntersectWith(set2);
        Console.WriteLine("\nIntersection result...");
        foreach (string str in set1) {
            Console.WriteLine(str);
        }
    }
}

ผลลัพธ์ตัวอย่าง 1

Elements in HashSet1
AB
CD
EF
IJ
KL
OP
Elements in HashSet2
EF
KL
Count of elements in HashSet2 = 2
Elements in HashSet2... (UPDATED)
EF
Count of elements in HashSet2 (Updated) = 1
Is set1 a superset of set2? True
Intersection result...
EF

ตัวอย่าง 2: HashSet int ที่เหมือนกันทั้งคู่

using System;
using System.Collections.Generic;

public class Demo {
    public static void Main() {
        HashSet set1 = new HashSet();
        set1.Add(30);
        set1.Add(60);
        set1.Add(70);
        set1.Add(80);
        set1.Add(100);
        set1.Add(125);

        Console.WriteLine("Elements in HashSet1");
        foreach (int val in set1) {
            Console.WriteLine(val);
        }

        HashSet set2 = new HashSet();
        set2.Add(30);
        set2.Add(60);
        set2.Add(70);
        set2.Add(80);
        set2.Add(100);
        set2.Add(125);

        Console.WriteLine("\nElements in HashSet2");
        foreach (int val in set2) {
            Console.WriteLine(val);
        }

        set1.IntersectWith(set2);
        Console.WriteLine("\nIntersection result...");
        foreach (int val in set1) {
            Console.WriteLine(val);
        }
    }
}

ผลลัพธ์ตัวอย่าง 2

Elements in HashSet1
30
60
70
80
100
125
Elements in HashSet2
30
60
70
80
100
125
Intersection result...
30
60
70
80
100
125

สรุป

  • IntersectWith แปลงเซตต้นทางให้เป็นส่วนร่วม
  • ใช้ IsSupersetOf ตรวจสอบก่อน intersect ได้
  • ประสิทธิภาพดี O(n) สำหรับ HashSet