SortedDictionary a SortedList jsou třídy, které obě vychází funkčností (nikoli kódem) z třídy Dictionary. Tedy jedná se o seznam s hodnotou a unikátním klíčem. Při deklaraci se u obou předávají 2 generické parametry (typ klíče a typ hodnoty - stejně jako u Dictionary).
Hlavní funkcí těchto kolekcí je automatické řazení. Každý nový prvek se vkládá už předem seřazený podle klíče. Pokud chceme použít vlastní řazení, předáme konstruktoru instanci třídy IComparer, ale o tom zde psát nebudu.
Viditelný rozdíl mezi SortedDictionary a SortedList je ten, že do SortedList se k položkám může přistupovat i pomocí indexu, nejenom klíče.
Rychlostní a paměťový rozdíl je:
- SortedList alokuje obecně méně paměti (u velmi nízkého počtu položek je to ale naopak)
- Při velkém počtu položek trvá vkládání do SortedList často déle
- Vyhledávání v SortedList trvá kratší dobu
- Pokud budete mít méně jak 10 000 záznamů, tak předchozí body vůbec neřešte. Rozdíly nejsou tak dramatické.
Příklad použiží obou tříd ve Visual Basic .NET následuje zde:
' vytvoření SortedList a SortedDictionary s klíčem typu INTEGER a hodnotou typu STRING
Dim jmena As New SortedList(Of Integer, String)
jmena.Add(3, "Jméno v SortedList 3")
jmena.Add(1, "Jméno v SortedList 1")
jmena.Add(2, "Jméno v SortedList 2")
Dim jmena2 As New SortedDictionary(Of Integer, String)
jmena2.Add(3, "Jméno v SortedDictionary 3")
jmena2.Add(1, "Jméno v SortedDictionary 1")
jmena2.Add(2, "Jméno v SortedDictionary 2")
' vypsat položky, které budou seřezené ze SortedList
For Each item As KeyValuePair(Of Integer, String) In jmena
Console.WriteLine("{0} - {1}", item.Key, item.Value)
Next
' vypsat položky, které budou seřezené ze SortedDictionary
For Each item As KeyValuePair(Of Integer, String) In jmena2
Console.WriteLine("{0} - {1}", item.Key, item.Value)
Next
' čtení položek podle indexu je možné jen u SortedList!
Console.WriteLine("První položka v seznamu je: {0}", jmena.Values(0))
Console.WriteLine("Poslední položka v seznamu je: {0}", jmena.Values(jmena.Count - 1))
Console.ReadKey()
V C# tady:
// vytvoření SortedList a SortedDictionary s klíčem typu INTEGER a hodnotou typu STRING
SortedList<int, string> jmena = new SortedList<int, string>();
jmena.Add(3, "Jméno v SortedList 3");
jmena.Add(1, "Jméno v SortedList 1");
jmena.Add(2, "Jméno v SortedList 2");
SortedDictionary<int, string> jmena2 = new SortedDictionary<int, string>();
jmena2.Add(3, "Jméno v SortedDictionary 3");
jmena2.Add(1, "Jméno v SortedDictionary 1");
jmena2.Add(2, "Jméno v SortedDictionary 2");
// vypsat položky, které budou seřezené ze SortedList
foreach (KeyValuePair<int, string> item in jmena)
{
Console.WriteLine("{0} - {1}", item.Key, item.Value);
}
// vypsat položky, které budou seřezené ze SortedDictionary
foreach (KeyValuePair<int, string> item in jmena2)
{
Console.WriteLine("{0} - {1}", item.Key, item.Value);
}
// čtení položek podle indexu je možné jen u SortedList!
Console.WriteLine("První položka v seznamu je: {0}", jmena.Values[0]);
Console.WriteLine("Poslední položka v seznamu je: {0}", jmena.Values[jmena.Count - 1]);
V této sérii jsem psal i o následujících třídách:
List
Dictionary
SortedDictionary a SortedList
Queue
Stack
HashSet