C# SortedList

C#-Sammlungen

In C# ist SortedList eine Sammlung, die automatisch nach Schlüssel sortiert wird. Sie speichert Daten als Schlüssel-Wert-Paare und sortiert beim Hinzufügen oder Aktualisieren automatisch nach Schlüsselreihenfolge (aufsteigend).

Die Klasse SortedList stellt eine Sammlung von nach Schlüssel sortierten Schlüssel/Wert-Paaren dar.key => valueAuf diese Schlüssel/Wert-Paare kann sowohl über den Schlüssel als auch über den Index zugegriffen werden.

Eine sortierte Liste ist eine Kombination aus einem Array und einer Hashtabelle. Sie enthält eine Liste von Elementen, auf die über einen Schlüssel oder einen Index zugegriffen werden kann. Greift man über einen Index auf Elemente zu, ist sie ein dynamisches Array (ArrayList); greift man über einen Schlüssel auf Elemente zu, ist sie eine Hashtabelle (Hashtable). Die Elemente in der Sammlung sind immer nach dem Schlüsselwert sortiert.

SortedList hat zwei Versionen:

  1. nicht generischSortedList(System.Collections.SortedList)
  2. GenerikaSortedList<TKey, TValue>(System.Collections.Generic.SortedList<TKey, TValue>)

Funktionen:

  • Automatische Sortierung: Alle Schlüssel werden in aufsteigender Reihenfolge sortiert; es ist nicht erforderlich, manuell eine Sortiermethode aufzurufen.
  • Speicherung als Schlüssel-Wert-Paare: Jeder Schlüssel ist eindeutig; der zugehörige Wert kann sich wiederholen.
  • Dynamische Anpassung der Kapazität: Die Größe des internen Speichers wird nach Bedarf automatisch angepasst.
  • IndexzugriffZugriff auf Daten über Schlüssel oder Index.
  • Effiziente Operationen: Die durchschnittliche Zeitkomplexität für Abruf, Einfügen und Löschen beträgt O(log n).

Methoden und Eigenschaften der Klasse SortedList

Die folgende Tabelle listetSortedListeinige häufige Verwendungen der Klasse aufEigenschaft:

AttributnameTypeBeschreibung
CountintRuft die Anzahl der Schlüssel-Wert-Paare in der sortierten Liste ab.
CapacityintRuft die Kapazität der sortierten Liste ab oder legt sie fest.
ComparerICompareroderIComparer<TKey>Ruft den Comparer ab, der zum Sortieren der Schlüssel verwendet wird.
IsReadOnlyboolGibt an, ob die sortierte Liste schreibgeschützt ist.
IsFixedSizeboolGibt an, ob die sortierte Liste eine feste Größe hat (immerfalse)。
KeysICollectionoderIList<TKey>Ruft alle Schlüssel in der sortierten Liste ab.
ValuesICollectionoderIList<TValue>Ruft alle Werte in der sortierten Liste ab.

Die folgende Tabelle listetSortedListEinige häufige Verwendungen der KlasseMethoden auf:

MethodennameRückgabetypBeschreibung
Hinzufügen und Entfernen
Add(TKey key, TValue value)voidFügt das angegebene Schlüssel-Wert-Paar zur sortierten Liste hinzu.
Remove(TKey key)boolEntfernt das Element mit dem angegebenen Schlüssel aus der sortierten Liste.
RemoveAt(int index)voidEntfernt das Schlüssel-Wert-Paar am angegebenen Index in der sortierten Liste.
Clear()voidEntfernt alle Elemente aus der sortierten Liste.
Suchen und Zugreifen
ContainsKey(TKey key)boolBestimmt, ob die sortierte Liste den angegebenen Schlüssel enthält.
ContainsValue(TValue value)boolBestimmt, ob die sortierte Liste den angegebenen Wert enthält.
IndexOfKey(TKey key)intGibt den Index des angegebenen Schlüssels zurück.
IndexOfValue(TValue value)intGibt den Index des angegebenen Werts zurück.
TryGetValue(TKey key, out TValue value)boolRuft den dem angegebenen Schlüssel zugeordneten Wert ab und gibt ihn zurück, wenn er vorhanden ist.true。
Kopieren und Aufzählen
CopyTo(Array array, int index)voidKopiert die Elemente der sortierten Liste in ein Array, beginnend am angegebenen Index.
GetEnumerator()IEnumeratorGibt einen Enumerator zurück, der verwendet wird, um die Elemente in der sortierten Liste zu durchlaufen.

Beispiel

Das folgende Beispiel veranschaulicht das Konzept von SortedList.

Operationen der nicht generischen Version:

Beispiel

using System;
using System.Collections;

namespace CollectionsApplication
{
   class Program
   {
      static void Main(string[] args)
      {
         SortedList sl = new SortedList();

         sl.Add("001", "Zara Ali");
         sl.Add("002", "Abida Rehman");
         sl.Add("003", "Joe Holzner");
         sl.Add("004", "Mausam Benazir Nur");
         sl.Add("005", "M. Amlan");
         sl.Add("006", "M. Arif");
         sl.Add("007", "Ritesh Saikia");

         if (sl.ContainsValue("Nuha Ali"))
         {
            Console.WriteLine("Dieser Studentenname ist bereits in der Liste");
         }
         else
         {
            sl.Add("008", "Nuha Ali");
         }

         // Die Auflistung der Schlüssel abrufen
         ICollection key = sl.Keys;

         foreach (string k in key)
         {
            Console.WriteLine(k + ": " + sl[k]);
         }
      }
   }
}

Wenn der obige Code kompiliert und ausgeführt wird, liefert er die folgenden Ergebnisse:

001: Zara Ali
002: Abida Rehman
003: Joe Holzner
004: Mausam Banazir Nur
005: M. Amlan 
006: M. Arif
007: Ritesh Saikia
008: Nuha Ali

Generische Version:

Beispiel

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // Eine generische SortedList erstellen
        SortedList<int, string> sortedList = new SortedList<int, string>();

        // Schlüssel-Wert-Paar hinzufügen
        sortedList.Add(2, "Banane");
        sortedList.Add(1, "Apfel");
        sortedList.Add(3, "Kirsche");

        // Automatisch nach Schlüssel sortieren
        Console.WriteLine("Inhalt der SortedList:");
        foreach (var kvp in sortedList)
        {
            Console.WriteLine($"Schlüssel: {kvp.Key}, Wert: {kvp.Value}");
        }

        // Nachschlagen und Zugreifen
        Console.WriteLine($"\nWert für Schlüssel 2: {sortedList[2]}"); // Ausgabe: Banana

        // Elemente löschen
        sortedList.Remove(1);
        Console.WriteLine("\nNach dem Entfernen von Schlüssel 1:");
        foreach (var kvp in sortedList)
        {
            Console.WriteLine($"Schlüssel: {kvp.Key}, Wert: {kvp.Value}");
        }

        // Schlüssel und Wert prüfen
        Console.WriteLine($"\nEnthält Schlüssel 3: {sortedList.ContainsKey(3)}"); // Ausgabe: True
        Console.WriteLine($"Enthält Wert 'Apple': {sortedList.ContainsValue("Apple")}"); // Ausgabe: False
    }
}

C#-Sammlungen

Weitere Erweiterungen