C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Steps: In part 6, we use the TryGetValue method on the SortedDictionary, which is excellent for avoiding another key lookup.
And: If the key exists, the TryGetValue method returns true and it fills the out parameter.
OutThen: We use foreach on the SortedDictionary. This invokes the custom enumerator, which returns a sequence of KeyValuePairs.
C# program that uses SortedDictionary
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
// 1
// New SortedDictionary
SortedDictionary<string, int> sort =
new SortedDictionary<string, int>();
// 2
// Add strings and int keys
sort.Add("zebra", 5);
sort.Add("cat", 2);
sort.Add("dog", 9);
sort.Add("mouse", 4);
sort.Add("programmer", 100);
// 3
// Example: see if it doesn't contain "dog"
if (sort.ContainsKey("dog"))
{
Console.WriteLine(true);
}
// 4
// Example: see if it contains "zebra"
if (sort.ContainsKey("zebra"))
{
Console.WriteLine(true);
}
// 5
// Example: see if it contains "ape"
Console.WriteLine(sort.ContainsKey("ape"));
// 6
// Example: see if it contains "programmer",
// and if so get the value for "programmer"
int v;
if (sort.TryGetValue("programmer", out v))
{
Console.WriteLine(v);
}
// 7
// Example: print SortedDictionary in alphabetic order
foreach (KeyValuePair<string, int> p in sort)
{
Console.WriteLine("{0} = {1}",
p.Key,
p.Value);
}
}
}
Output
True
True
False
100
cat = 2
dog = 9
mouse = 4
programmer = 100
zebra = 5
Quote: The SortedDictionary(TKey, TValue) generic class is a binary search tree with O(log n) retrieval, where N is the number of elements in the dictionary (Microsoft Docs).
Benchmark results:
Dictionary lookup time: Close to O(1)
SortedDictionary lookup time: O(log n)
So: When I needed to print the SortedDictionary to a file, I wouldn't need to sort it again.
Tip: By using SortedDictionary instead of custom Dictionary sorting code, you can reduce the footprint of your .NET program.
Note: The first row has 10 elements. And then each following row has 10 times more. The times are in milliseconds.
Result: Performance was awful and it degraded when there were more than 10000 elements to the point of failure.
Add element benchmark: SortedDictionary, Dictionary
5, 0
0, 0
1, 0
22, 2
310, 33
3769, 521
ContainsKey benchmark: SortedDictionary, Dictionary
73, 5
132, 6
188, 8
255, 9
340, 9
419, 10
Note: The SortedList has different performance characteristics, particularly when inserting or removing elements from the collection.
SortedList