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

วิธีลบรายการที่ดัชนีที่ระบุจาก SortedList ใน C#

บทความนี้สาธิตวิธีการลบรายการ (entry) ที่ดัชนี (index) ที่ระบุจาก SortedList โดยใช้ method RemoveAt(int index)

ตัวอย่างที่ 1: ลบดัชนี 3 จาก SortedList

using System;
using System.Collections;

public class Demo
{
    public static void Main(String[] args)
    {
        SortedList sortedList = new SortedList();
        sortedList.Add("A", "1");
        sortedList.Add("B", "2");
        sortedList.Add("C", "3");
        sortedList.Add("D", "4");
        sortedList.Add("E", "5");
        sortedList.Add("F", "6");
        sortedList.Add("G", "7");
        sortedList.Add("H", "8");
        sortedList.Add("I", "9");
        sortedList.Add("J", "10");

        Console.WriteLine("SortedList elements...");
        foreach (DictionaryEntry d in sortedList)
        {
            Console.WriteLine("Key = " + d.Key + ", Value = " + d.Value);
        }

        Console.WriteLine("Count of SortedList key-value pairs = " + sortedList.Count);

        sortedList.RemoveAt(3); // ลบ index 3 (D, 4)

        Console.WriteLine("\nEnumerator to iterate through the SortedList...");
        IDictionaryEnumerator demoEnum = sortedList.GetEnumerator();
        while (demoEnum.MoveNext())
        {
            Console.WriteLine("Key = " + demoEnum.Key + ", Value = " + demoEnum.Value);
        }

        Console.WriteLine("Count of SortedList key-value pairs (Updated) = " + sortedList.Count);
    }
}

ผลลัพธ์

SortedList elements...
Key = A, Value = 1
Key = B, Value = 2
Key = C, Value = 3
Key = D, Value = 4
Key = E, Value = 5
Key = F, Value = 6
Key = G, Value = 7
Key = H, Value = 8
Key = I, Value = 9
Key = J, Value = 10
Count of SortedList key-value pairs = 10

Enumerator to iterate through the SortedList...
Key = A, Value = 1
Key = B, Value = 2
Key = C, Value = 3
Key = E, Value = 5
Key = F, Value = 6
Key = G, Value = 7
Key = H, Value = 8
Key = I, Value = 9
Key = J, Value = 10
Count of SortedList key-value pairs (Updated) = 9

ตัวอย่างที่ 2: ลบหลายดัชนีติดต่อกัน

using System;
using System.Collections;

public class Demo
{
    public static void Main(String[] args)
    {
        SortedList sortedList = new SortedList();
        sortedList.Add("One", "Mouse");
        sortedList.Add("Two", "Keyboard");
        sortedList.Add("Three", "Headphone");
        sortedList.Add("Four", "Speakers");
        sortedList.Add("Five", "RAM");

        Console.WriteLine("SortedList elements...");
        foreach (DictionaryEntry d in sortedList)
        {
            Console.WriteLine("Key = " + d.Key + ", Value = " + d.Value);
        }

        Console.WriteLine("Count of SortedList key-value pairs = " + sortedList.Count);

        sortedList.RemoveAt(1); // ลบ index 1 (Four, Speakers)
        sortedList.RemoveAt(2); // ลบ index 2 เดิม (ตอนนี้คือ Three, Headphone)

        Console.WriteLine("\nEnumerator to iterate through the SortedList...");
        IDictionaryEnumerator demoEnum = sortedList.GetEnumerator();
        while (demoEnum.MoveNext())
        {
            Console.WriteLine("Key = " + demoEnum.Key + ", Value = " + demoEnum.Value);
        }

        Console.WriteLine("Count of SortedList key-value pairs (Updated) = " + sortedList.Count);
    }
}

ผลลัพธ์

SortedList elements...
Key = Five, Value = RAM
Key = Four, Value = Speakers
Key = One, Value = Mouse
Key = Three, Value = Headphone
Key = Two, Value = Keyboard
Count of SortedList key-value pairs = 5

Enumerator to iterate through the SortedList...
Key = Five, Value = RAM
Key = One, Value = Mouse
Key = Two, Value = Keyboard
Count of SortedList key-value pairs (Updated) = 3

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

  • RemoveAt(int index) ลบรายการที่ดัชนีที่ระบุใน sorted order (0-based)
  • โยน ArgumentOutOfRangeException ถ้าดัชนีอยู่นอกช่วง
  • ดัชนีเป็นของ sorted order (เรียงตามคีย์) ไม่ใช่ insertion order
  • หลังลบแล้ว รายการถัดไปจะเลื่อนมาทับ (shift left) ใน internal arrays
  • เวลา complexity: O(n) - ต้องเลื่อนข้อมูลใน array ทั้ง keys และ values
  • Method คล้ายกัน: Remove(key) ลบตามคีย์ (O(n) เช่นกัน)
  • แนะนำใช้ foreach กับ DictionaryEntry แทน IDictionaryEnumerator