A Dictionary in C# is a generic collection of key-value pairs. It is defined using the Dictionary<TKey, TValue> class, where TKey is the type of the keys and TValue is the type of the values. The Dictionary class is implemented as a hash table, which provides fast lookups and additions. It can be used to store and retrieve values based on their associated keys. For example:
Dictionary<string, int> grades = new Dictionary<string, int>();
grades.Add("sylvia",90);
grades.Add("sundar",70);
int johnsGrade = grades["rahul"];
Dictionary Characteristics
- Dictionary<TKey, TValue> stores key-value pairs.
- Comes under System.Collections.Generic namespace.
- Implements IDictionary<TKey, TValue> interface.
- Keys must be unique and cannot be null.
- Values can be null or duplicate.
- Values can be accessed the bypassing associated key in the indexer e.g. yourDictionary[key]
- Elements are stored as KeyValuePair<TKey, TValue> objects.
Creating a Dictionary
There are several ways to create a Dictionary in C#:
- Using the Dictionary constructor:
Dictionary<string, int> dict = new Dictionary<string, int>();
- Using an Initializer:
Dictionary<string, int> dict = new Dictionary<string, int>
{
{"John", 25},
{"Jane", 30},
{"Jim", 35}
};
- Using the
Add
method:
Dictionary<string, int> dict = new Dictionary<string, int>();
dict.Add("John", 25);
dict.Add("Jane", 30);
dict.Add("Jim", 35);
Note: The keys in a dictionary must be unique, otherwise an ArgumentException will be thrown when adding duplicate keys.
C# dictionary initializer
A Dictionary Initializer in C# is a syntax that allows you to initialize a dictionary with values at the time of creation.
The syntax is as follows:
Dictionary<string, int> grades = new Dictionary<string, int>
{
{"sylvia", 30},
{"neupane", 70},
{"mirmee", 25}
};
Each key-value pair is enclosed within curly braces {} and separated by a comma. The key is a string in this example, and the value is an integer.
This approach is convenient and readable, and it eliminates the need for multiple calls to the Add method to populate the dictionary.
C# dictionary foreach
You can use a foreach loop to iterate over the key-value pairs in a Dictionary in C#. The syntax is as follows:
Dictionary<string, int> dictionaryForeach= new Dictionary<string, int>
{
{"sylvia", 60},
{"neupane", 70},
{"mirmee", 25}
};
foreach (KeyValuePair<string, int> item in dictionaryForeach) { Console.WriteLine("Key: {0}, Value: {1}", item.Key, item.Value); }
In each iteration, the KeyValuePair structure represents a single key-value pair in the dictionary. The Key property holds the key, and the Value property holds the value.
Alternatively, you can use the var keyword to simplify the syntax:
foreach (var item in dictionaryForeach)
{
Console.WriteLine("Key: {0}, Value: {1}", item.Key, item.Value);
}
C# dictionary methods
Here are some common methods of the Dictionary
class in C#:
Add
: Adds a key-value pair to the dictionary.Clear
: Removes all elements from the dictionary.ContainsKey
: Determines whether the dictionary contains a specific key.ContainsValue
: Determines whether the dictionary contains a specific value.Remove
: Removes a key-value pair from the dictionary based on the key.TryGetValue
: Gets the value associated with the specified key or a default value if the key is not found.Count
: Gets the number of elements in the dictionary.Keys
: Gets a collection of all keys in the dictionary.Values
: Gets a collection of all values in the dictionary.Item
: Gets or sets the value associated with the specified key.
C# dictionary add
To add a key-value pair to a Dictionary
in C#, you can use the Add
method:
Dictionary<string, int> dict = new Dictionary<string, int>();
dict.Add("Key1", 1);
dict.Add("Key2", 2);
Note that if you try to add a key that already exists in the dictionary, an exception of type ArgumentException
will be thrown. To avoid this, you can use the TryAdd
method, which returns a boolean indicating whether the key-value pair was added to the dictionary:
bool success = dict.TryAdd("Key1", 3); // success = false
C# dictionary containskey
ContainsKey() Method. This method is used to check whether the Dictionary<TKey, TValue> contains the specified key or not. Syntax: public bool ContainsKey (TKey key);
To check if a specific key exists in a Dictionary in C#, you can use the ContainsKey method:
Dictionary<string, int> dict = new Dictionary<string, int>();
dict.Add("Key1", 1);
dict.Add("Key2", 2);
bool exists = dict.ContainsKey("Key1"); // exists = true
C# dictionary keys
You can create the Dictionary<TKey, TValue> object by passing the type of keys and values it can store. The following example shows how to create a dictionary to get a collection of all keys in a Dictionary in C#, you can use the Keys property:
Dictionary<string, int> dict = new Dictionary<string, int>();
dict.Add("Key1", 1);
dict.Add("Key2", 2);
var keys = dict.Keys;
foreach (var key in keys)
{
Console.WriteLine(key);
}
C# dictionary get value
To get the value associated with a specific key in a Dictionary
in C#, you can use the following methods:
- The
TryGetValue
method:
Dictionary<string, int> dict = new Dictionary<string, int>();
dict.Add("Key1", 1);
dict.Add("Key2", 2);
int value;
bool success = dict.TryGetValue("Key1", out value);
if (success)
{
Console.WriteLine(value); // output: 1
}
- The indexer (
[]
) operator:
int value = dict["Key1"];
Console.WriteLine(value); // output: 1
Note that if you try to get the value associated with a key that does not exist in the dictionary, an exception of type KeyNotFoundException
will be thrown. To avoid this, you can use the TryGetValue
method.
C# dictionary constructor
A Dictionary
in C# can be created using one of the following constructors:
- Default constructor: Creates an empty
Dictionary
with default capacity:
Dictionary<string, int> dictionary = new Dictionary<string, int>();
- Constructor with capacity: Creates an empty
Dictionary
with the specified capacity:
Dictionary<string, int> dictionary = new Dictionary<string, int>(10);
- Constructor with comparer: Creates an empty
Dictionary
with the specified equality comparer:
Dictionary<string, int> dictionary = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
- Constructor with capacity and comparer: Creates an empty
Dictionary
with the specified capacity and equality comparer:
Dictionary<string, int> dictionary = new Dictionary<string, int>(10, StringComparer.OrdinalIgnoreCase);
- Constructor with dictionary: Creates a
Dictionary
that contains the elements of the specifiedIDictionary
:
IDictionary<string, int> sourceCode = new Dictionary<string, int>()
{
{ "Key1", 1 },
{ "Key2", 2 },
};
Dictionary<string, int> dictionary = new Dictionary<string, int>(sourceCode );
C# dictionary vs hashtable
Dictionary
and Hashtable
are both collections in C# that are used to store key-value pairs. However, there are some differences between them:
Generics:
Dictionary
is a generic type, which means that you can specify the types of the keys and values when you create the dictionary.Hashtable
, on the other hand, is a non-generic type and stores keys and values as objects.Performance:
Dictionary
is generally faster thanHashtable
due to its generic implementation and better memory management.Equality comparison:
Dictionary
uses the default equality comparison for the keys, which is based on theIEquatable
interface andobject.Equals
method.Hashtable
uses theIEqualityComparer
interface for equality comparison, which means that you can provide a custom implementation of the equality comparison.Null keys:
Dictionary
does not allow null keys.Hashtable
allows null keys, but it requires that the keys are unique, so you cannot have multiple key-value pairs with a null key.Syntax:
Dictionary
uses a more modern syntax, which makes it easier to use.Hashtable
uses a more traditional syntax, which may be less convenient for some developers.
Overall, Dictionary
is the preferred choice for most use cases, as it provides better performance and a more convenient syntax. However, if you need to use a custom equality comparison, or if you need to store null keys, you may need to use Hashtable
.
C# dictionary orderby
The order of elements in a Dictionary
is not guaranteed to be the same as the order in which the elements were added. If you need to retrieve the elements of a Dictionary
in a specific order, you can do the following:
- Convert the
Dictionary
to aList
and sort the list using theOrderBy
orOrderByDescending
method:
Dictionary<string, int> dicttionary = new Dictionary<string, int>()
{
{ "Key3", 3 },
{ "Key1", 1 },
{ "Key2", 2 },
};
var sortedList = dicttionary.OrderBy(x => x.Value).ToList();
foreach (var item in sortedList)
{
Console.WriteLine($"{item.Key}: {item.Value}");
}
- Use a
SortedDictionary
instead of aDictionary
. ASortedDictionary
is a dictionary that maintains its elements in sorted order:
SortedDictionary<string, int> dicttionary = new SortedDictionary<string, int>()
{
{ "Key3", 3 },
{ "Key1", 1 },
{ "Key2", 2 },
};
foreach (var item in dicttionary)
{
Console.WriteLine($"{item.Key}: {item.Value}");
}
Note that SortedDictionary
has a slower insert performance compared to Dictionary
, so it's not suitable for high-performance scenarios where frequent inserts are performed.
Comments