In C#, SortedDictionary is a generic collection that is used to store the key/value pairs in the sorted form and the sorting is done on the key. SortedDictionary is defined under System.Collection.Generic namespace. It is dynamic in nature means the size of the sorted dictionary is growing according to the need. Important Points:
- The SortedDictionary class implements the
- ICollection<KeyValuePair<TKey, TValue>> Interface
- IDictionary<TKey, TValue> Interface
- IEnumerable<KeyValuePair<TKey, TValue>> Interface
- IEnumerable<T> Interface
- IReadOnlyCollection<KeyValuePair<TKey, TValue>> Interface
- IReadOnlyDictionary<TKey, TValue> Interface
- ICollection Interface
- IDictionary Interface
- IEnumerable Interface
- In SortedDictionary, the key must be unique. Duplicate keys are not allowed.
- In SortedDictionary, the keys are immutable and cannot be null.
- In SortedDictionary, the value can be null when the type of the value is of reference type.
- It provides fastest insertion and removal operations for unsorted data.
- In SortedDictionary, you can only store the same types of key/value pairs.
- The capacity of a SortedDictionary is the number of key/value pairs that SortedDictionary can hold.
- It sort in ascending order.
How to create a SortedDictionary?
A SortedDictionary class has 4 constructors which are used to create a SortedDictionary and the constructors are as follows:
- SortedDictionary<TKey, TValue>(): This constructor is used to create an instance of the SortedDictionary class that is empty and uses the default IComparer implementation for the key type.
- SortedDictionary<TKey, TValue>(IComparer): This constructor is used to create an instance of the SortedDictionary class that is empty and uses the specified IComparer implementation to compare keys.
- SortedDictionary<TKey, TValue>(IDictionary): This constructor is used to create an instance of the SortedDictionary class that contains elements copied from the specified IDictionary and uses the default IComparer implementation for the key type.
- SortedDictionary<TKey, TValue>(IDictionary, IComparer): This constructor is used to create an instance of the SortedDictionary class that contains elements copied from the specified IDictionary and uses the specified IComparer implementation to compare keys.
Let’s see how to create a SortedDictionary using SortedDictionary<TKey, TValue>() constructor: Step 1: Include System.Collection.Generics namespace in your program with the help of using keyword.
using System.Collection.Generics;
Step 2:Create a SortedDictionary using SortedDictionary<TKey, TValue> class as shown below:
SortedDictionary<Type_of_key, Type_of_value> sorteddictionary_name = new SortedDictionary<Type_of_key, Type_of_value>();
Step 3: If you want to add elements in your SortedDictionary then use Add() method to add a key/value pairs in your SortedDictionary. And you can also add key/value pair in the SortedDictionary using Collection Initializer. Step 4: The key/value pair of the SortedDictionary is accessed by using a foreach loop, or by using index value, or by using for loop. Example:
CSharp
using System;
using System.Collections.Generic;
class GFG {
static public void Main()
{
SortedDictionary< int , string > My_sdict =
new SortedDictionary< int , string >();
My_sdict.Add(004, "Ask.com");
My_sdict.Add(003, "Yahoo");
My_sdict.Add(001, "Google");
My_sdict.Add(005, "AOL.com");
My_sdict.Add(002, "Bing");
Console.WriteLine("Top Search Engines:");
foreach (KeyValuePair< int , string > pair in My_sdict)
{
Console.WriteLine("Rank: {0} and Name: {1}",
pair.Key, pair.Value);
}
SortedDictionary< int , string > My_sdict1 =
new SortedDictionary< int , string >() {
{1, "Python"},
{5, "Swift"},
{2, "JavaScript"},
{4, "Go" },
{3, "Rust"}};
Console.WriteLine("Top Programming Language in 2019: ");
foreach (KeyValuePair< int , string > pair in My_sdict1)
{
Console.WriteLine("Rank:{0} and Name: {1}",
pair.Key, pair.Value);
}
}
}
|
Output
Top Search Engines:
Rank: 1 and Name: Google
Rank: 2 and Name: Bing
Rank: 3 and Name: Yahoo
Rank: 4 and Name: Ask.com
Rank: 5 and Name: AOL.com
Top Programming Language in 2019:
Rank:1 and Name: Python
Rank:2 and Name: JavaScript
Rank:3 and Name: Rust
Rank:4 and Name: Go
Rank:5 and Name: Swift
How to remove elements from the SortedDictionary?
In SortedDictionary, it is allowed to remove elements from the SortedDictionary. SortedDictionary<TKey, TValue> class provides two different methods to remove elements and the methods are:
- Clear(): This method is used to remove all elements from the SortedDictionary.
- Remove(TKey): This method is used to remove the element with the specified key from the SortedDictionary.
Example:
CSharp
using System;
using System.Collections.Generic;
class GFG {
static public void Main()
{
SortedDictionary< int , string > My_sdict =
new SortedDictionary< int , string >();
My_sdict.Add(001, "Google");
My_sdict.Add(002, "Bing");
My_sdict.Add(003, "Yahoo");
My_sdict.Add(004, "Ask.com");
My_sdict.Add(005, "AOL.com");
Console.WriteLine("Key/Value pair: {0}",
My_sdict.Count);
My_sdict.Remove(002);
Console.WriteLine("Key/Value pair: {0}",
My_sdict.Count);
My_sdict.Clear();
Console.WriteLine("Key/Value pair: {0}",
My_sdict.Count);
}
}
|
Output
Key/Value pair: 5
Key/Value pair: 4
Key/Value pair: 0
How to check the availability of key/value pair in the SortedDictionary?
In SortedDictionary, you can check whether the given key or value present in the specified SortedDictionary or not. The SortedDictionary<TKey, TValue> class provides two different methods for checking and the methods are:
- ContainsKey(TKey): This method is used to determine whether the SortedDictionary contains an element with the specified key.
- ContainsValue(TValue): This method is used to determine whether the SortedDictionary contains an element with the specified value.
Example:
CSharp
using System;
using System.Collections.Generic;
class GFG {
static public void Main()
{
SortedDictionary< int , string > My_sdict =
new SortedDictionary< int , string >();
My_sdict.Add(001, "Google");
My_sdict.Add(002, "Bing");
My_sdict.Add(003, "Yahoo");
My_sdict.Add(004, "Ask.com");
My_sdict.Add(005, "AOL.com");
if (My_sdict.ContainsKey(004) == true )
{
Console.WriteLine("Key Found..");
}
else
{
Console.WriteLine("Key Not Found..");
}
if (My_sdict.ContainsValue("Baidu") == true )
{
Console.WriteLine("Value Found..");
}
else
{
Console.WriteLine("Value Not Found..");
}
}
}
|
Output
Key Found..
Value Not Found..
How to access all the elements from the SortedDictionary?
To access elements in a SortedDictionary by key in C#, you can use the indexing operator or the TryGetValue() method.
Here’s a brief summary of the TryGetValue() method:
- It attempts to retrieve the value associated with a specified key from the SortedDictionary.
- If the key is found, the method assigns the corresponding value to the out parameter and returns true.
- If the key is not found, the out parameter is assigned the default value for its type (e.g., 0 for int) and the method returns false.
Here’s an example:
C#
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
SortedDictionary< string , int > dictionary = new SortedDictionary< string , int >();
dictionary.Add( "Apple" , 5);
dictionary.Add( "Banana" , 3);
dictionary.Add( "Orange" , 8);
int appleCount = dictionary[ "Apple" ];
int orangeCount = dictionary[ "Orange" ];
Console.WriteLine($ "Apple count: {appleCount}" );
Console.WriteLine($ "Orange count: {orangeCount}" );
int bananaCount;
if (dictionary.TryGetValue( "Banana" , out bananaCount))
{
Console.WriteLine($ "Banana count: {bananaCount}" );
}
else
{
Console.WriteLine( "Banana not found in the dictionary" );
}
Console.ReadLine();
}
}
|
Output
Apple count: 5
Orange count: 8
Banana count: 3
In the above example, we create a SortedDictionary with string keys and integer values. We add some key-value pairs to the dictionary. Then, we access the elements by key using the indexing operator (dictionary[“key”]) and the TryGetValue() method (dictionary.TryGetValue(key, out value)). Finally, we display the retrieved values on the console.
Note that when using the indexing operator, if the specified key does not exist in the SortedDictionary, it will throw a KeyNotFoundException. Therefore, it’s recommended to use the TryGetValue() method when there’s a possibility of the key not existing in the dictionary to handle such scenarios gracefully.
How to clear all the elements from the SortedDictionary?
To clear all elements from a SortedDictionary in C#, you can use the Clear() method.
C#
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
SortedDictionary< string , int > dictionary = new SortedDictionary< string , int >();
dictionary.Add( "Apple" , 10);
dictionary.Add( "Banana" , 5);
dictionary.Add( "Orange" , 8);
dictionary.Clear();
Console.WriteLine( "Number of elements in the SortedDictionary: " + dictionary.Count);
}
}
|
Output
Number of elements in the SortedDictionary: 0
In this example, we create a SortedDictionary with string keys and int values. We add three key-value pairs to the dictionary using the Add method. Then, we clear all elements from the SortedDictionary using the Clear method. Finally, we display the count of elements in the SortedDictionary, which should be 0 since we cleared all the elements.
Whether you're preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape,
GeeksforGeeks Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we've already empowered, and we're here to do the same for you. Don't miss out -
check it out now!
Last Updated :
25 Sep, 2023
Like Article
Save Article