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

การได้ค่าสูงสุดใน SortedSet ใน C#

SortedSet<T> มี property Max คืนค่าสูงสุดตามลำดับการเรียง ทำงานใน O(1) คู่กับ Min สำหรับค่าต่ำสุด

ตัวอย่างโค้ดที่ 1: สตริง

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        SortedSet set1 = new SortedSet();
        set1.Add("AB");
        set1.Add("BC");
        set1.Add("CD");
        set1.Add("EF");

        Console.WriteLine("Elements in SortedSet1...");
        foreach (string res in set1)
        {
            Console.WriteLine(res);
        }
        Console.WriteLine("Maximum element in SortedSet1 = " + set1.Max);

        SortedSet set2 = new SortedSet();
        set2.Add("BC");
        set2.Add("CD");
        set2.Add("DE");
        set2.Add("EF");
        set2.Add("AB");
        set2.Add("HI");
        set2.Add("JK");

        Console.WriteLine("Elements in SortedSet2 (Enumerator for SortedSet)...");
        SortedSet.Enumerator demoEnum = set2.GetEnumerator();
        while (demoEnum.MoveNext())
        {
            string res = demoEnum.Current;
            Console.WriteLine(res);
        }
        Console.WriteLine("Maximum element in SortedSet2 = " + set2.Max);
    }
}

ผลลัพธ์

Elements in SortedSet1...
AB
BC
CD
EF
Maximum element in SortedSet1 = EF
Elements in SortedSet2 (Enumerator for SortedSet)....
AB
BC
CD
DE
EF
HI
JK
Maximum element in SortedSet2 = JK

ตัวอย่างโค้ดที่ 2: จำนวนเต็ม พร้อม Min

using System;
using System.Collections.Generic;

public class Demo
{
    public static void Main()
    {
        SortedSet set1 = new SortedSet();
        set1.Add(5);
        set1.Add(50);
        set1.Add(20);
        set1.Add(10);
        set1.Add(70);
        set1.Add(60);
        set1.Add(55);
        set1.Add(95);

        Console.WriteLine("Elements in SortedSet...");
        foreach (int res in set1)
        {
            Console.WriteLine(res);
        }
        Console.WriteLine("Maximum element in SortedSet = " + set1.Max);
        Console.WriteLine("Minimum element in SortedSet = " + set1.Min);
    }
}

ผลลัพธ์

Elements in SortedSet...
5
10
20
50
55
60
70
95
Maximum element in SortedSet = 95
Minimum element in SortedSet = 5

ข้อสังเกต

  • Max และ Min ต้องการ Count > 0 มิฉะนั้นโยน InvalidOperationException
  • เรียงตาม IComparer<T> (default = Comparer<T>.Default)
  • String เรียง lexicographic: "AB" < "BC" < "CD" < "EF" < "HI" < "JK"
  • Int เรียง numeric: 5 < 10 < 20 < 50 < 55 < 60 < 70 < 95

Range Queries ด้วย GetViewBetween


var set = new SortedSet { 5, 10, 20, 50, 55, 60, 70, 95 };

// ดูเฉพาะช่วง 20-70
var view = set.GetViewBetween(20, 70);
Console.WriteLine(view.Min); // 20
Console.WriteLine(view.Max); // 70
Console.WriteLine(string.Join(", ", view)); // 20, 50, 55, 60, 70

SortedSet vs อื่นๆ สำหรับ Max/Min

CollectionMax/MinComplexityNote
SortedSet<T>Property Max/MinO(1)Best for frequent min/max
HashSet<T>ไม่มีO(n)ต้อง LINQ Max()/Min()
List<T>ไม่มีO(n)ต้อง LINQ หรือ Sort แล้วดู index
PriorityQueue<T>Peek() ให้ MinO(1).NET 6+, Min-heap only