C# SortedList
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:
- nicht generisch
SortedList(System.Collections.SortedList) - Generika
SortedList<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:
| Attributname | Type | Beschreibung |
|---|---|---|
Count | int | Ruft die Anzahl der Schlüssel-Wert-Paare in der sortierten Liste ab. |
Capacity | int | Ruft die Kapazität der sortierten Liste ab oder legt sie fest. |
Comparer | ICompareroderIComparer<TKey> | Ruft den Comparer ab, der zum Sortieren der Schlüssel verwendet wird. |
IsReadOnly | bool | Gibt an, ob die sortierte Liste schreibgeschützt ist. |
IsFixedSize | bool | Gibt an, ob die sortierte Liste eine feste Größe hat (immerfalse)。 |
Keys | ICollectionoderIList<TKey> | Ruft alle Schlüssel in der sortierten Liste ab. |
Values | ICollectionoderIList<TValue> | Ruft alle Werte in der sortierten Liste ab. |
Die folgende Tabelle listetSortedListEinige häufige Verwendungen der KlasseMethoden auf:
| Methodenname | Rückgabetyp | Beschreibung |
|---|---|---|
| Hinzufügen und Entfernen | ||
Add(TKey key, TValue value) | void | Fügt das angegebene Schlüssel-Wert-Paar zur sortierten Liste hinzu. |
Remove(TKey key) | bool | Entfernt das Element mit dem angegebenen Schlüssel aus der sortierten Liste. |
RemoveAt(int index) | void | Entfernt das Schlüssel-Wert-Paar am angegebenen Index in der sortierten Liste. |
Clear() | void | Entfernt alle Elemente aus der sortierten Liste. |
| Suchen und Zugreifen | ||
ContainsKey(TKey key) | bool | Bestimmt, ob die sortierte Liste den angegebenen Schlüssel enthält. |
ContainsValue(TValue value) | bool | Bestimmt, ob die sortierte Liste den angegebenen Wert enthält. |
IndexOfKey(TKey key) | int | Gibt den Index des angegebenen Schlüssels zurück. |
IndexOfValue(TValue value) | int | Gibt den Index des angegebenen Werts zurück. |
TryGetValue(TKey key, out TValue value) | bool | Ruft 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) | void | Kopiert die Elemente der sortierten Liste in ein Array, beginnend am angegebenen Index. |
GetEnumerator() | IEnumerator | Gibt 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.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.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
}
}