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

ยูเนียน (Union) ของ SortedSet กับคอลเลกชันใน C#

ภาพรวม

SortedSet<T> ใน namespace System.Collections.Generic เป็นเซตที่เก็บค่าไม่ซ้ำและเรียงลำดับอัตโนมัติ เมธอด UnionWith() รวมองค์ประกอบจากคอลเลกชันอื่นเข้าไป (union operation) โดยเก็บเฉพาะค่าที่ไม่ซ้ำและคงการเรียงลำดับ

ตัวอย่างที่ 1: ยูเนียนของเซตที่มีค่าทับซ้อน

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        SortedSet<int> set1 = new SortedSet<int>();
        set1.Add(50);
        set1.Add(100);
        set1.Add(150);
        Console.WriteLine("SortedSet1 elements...");
        foreach(int ele in set1)
        {
            Console.WriteLine(ele);
        }
        SortedSet<int> set2 = new SortedSet<int>();
        set2.Add(100);
        set2.Add(150);
        set2.Add(200);
        set2.Add(250);
        Console.WriteLine("SortedSet2 elements...");
        foreach(int ele in set2)
        {
            Console.WriteLine(ele);
        }
        Console.WriteLine("Union...");
        set1.UnionWith(set2);
        foreach(int ele in set1)
        {
            Console.WriteLine(ele);
        }
    }
}

ผลลัพธ์

SortedSet1 elements...
50
100
150
SortedSet2 elements...
100
150
200
250
Union...
50
100
150
200
250

ตัวอย่างที่ 2: ยูเนียนของเซตเหมือนกันทุกประการ

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        SortedSet<int> set1 = new SortedSet<int>();
        set1.Add(100);
        set1.Add(200);
        set1.Add(300);
        set1.Add(400);
        set1.Add(500);
        set1.Add(600);
        Console.WriteLine("SortedSet1 elements...");
        foreach(int ele in set1)
        {
            Console.WriteLine(ele);
        }
        SortedSet<int> set2 = new SortedSet<int>();
        set2.Add(100);
        set2.Add(200);
        set2.Add(300);
        set2.Add(400);
        set2.Add(500);
        set2.Add(600);
        Console.WriteLine("SortedSet2 elements...");
        foreach(int ele in set2)
        {
            Console.WriteLine(ele);
        }
        Console.WriteLine("Union...");
        set1.UnionWith(set2);
        foreach(int ele in set1)
        {
            Console.WriteLine(ele);
        }
    }
}

ผลลัพธ์

SortedSet1 elements...
100
200
300
400
500
600
SortedSet2 elements...
100
200
300
400
500
600
Union...
100
200
300
400
500
600

คำอธิบายเพิ่มเติม

  • UnionWith() แก้ไขเซตต้นทาง (set1) โดยตรง (in-place) ไม่คืนค่าเซตใหม่
  • พารามิเตอร์รับ IEnumerable<T> ใดๆ ก็ได้ ไม่จำเป็นต้องเป็น SortedSet
  • ซับซ้อนเวลา O(m log n) โดย m = จำนวนองค์ประกอบในคอลเลกชันที่ส่งเข้า, n = จำนวนในเซตปัจจุบัน
  • SortedSet ใช้โครงสร้าง balanced tree (Red-Black tree) ให้การค้นหา เพิ่ม ลบ และการเรียงลำดับ O(log n)