07 Feb 2024




Intermediate

Dictionary<K, V> Generic Collections in C#

Definition:

Dictionary<K, V> is a generic collection class in the System.Collections.Generic namespace of C#. It represents a collection of key-value pairs where each unique key maps to a specific value. The K represents the type of keys, and V represents the type of values stored in the dictionary.

Key Features and Characteristics:

  • Key-Value Pair Storage: Each element in a dictionary is a key-value pair, where the key is used to access its corresponding value.
  • Generic: The Dictionary class is generic, allowing it to store elements of any data type specified for keys and values.
  • Fast Lookup: Dictionary provides fast lookup times for retrieving values based on their keys. It uses hash tables internally to achieve efficient key-based access.
  • Dynamic Sizing: Similar to List, Dictionary<K, V> can dynamically resize itself to accommodate more elements as needed.
  • Unordered: The order of elements in a dictionary is not guaranteed. It is based on the internal hashing mechanism used to store key-value pairs.
  • Unique Keys: Keys in a dictionary must be unique. If you attempt to add a key that already exists, it will replace the existing key-value pair.
  • Methods and Properties: Dictionary<K, V> provides a variety of methods and properties for adding, removing, and accessing elements. Some common methods include Add, Remove, ContainsKey, TryGetValue, Keys, Values, Clear, and more.

Uses:

  • Storing mappings between unique identifiers (keys) and associated data (values).
  • Efficiently looking up values based on their corresponding keys.
  • Implementing caches, lookup tables, and associative arrays.
  • Managing configuration settings, resource mappings, and data mappings.

Advantages:

  • Fast lookup times based on the internal hashing mechanism.
  • Supports generic types, allowing for flexibility in the types of keys and values stored.
  • Dynamic resizing capability allows dictionaries to efficiently handle varying numbers of elements.
  • Provides a rich set of methods and properties for manipulating and accessing key-value pairs.

Disadvantages:

  • Memory overhead associated with maintaining hash tables and managing collisions.
  • Not suitable for scenarios where the order of elements needs to be preserved.
  • Complexity of the hashing mechanism may lead to performance degradation for extremely large dictionaries or in scenarios with high collision rates.

Code Example:

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        // Creating a dictionary with string keys and int values
        Dictionary<string, int> ages = new Dictionary<string, int>();

        // Adding key-value pairs to the dictionary
        ages.Add("Alice", 30);
        ages.Add("Bob", 35);
        ages.Add("Charlie", 40);

        // Accessing values by key
        Console.WriteLine("Alice's age is: " + ages["Alice"]); // Output: Alice's age is: 30

        // Checking if a key exists
        if (ages.ContainsKey("Bob"))
        {
            Console.WriteLine("Bob's age is: " + ages["Bob"]); // Output: Bob's age is: 35
        }

        // Iterating over key-value pairs
        foreach (var kvp in ages)
        {
            Console.WriteLine("Name: " + kvp.Key + ", Age: " + kvp.Value);
        }
    }
}

Explanation: This example demonstrates creating a Dictionary<string, int> where keys are strings representing names and values are integers representing ages. Key-value pairs are added using the Add() method. Values can be accessed using the key. The ContainsKey() method is used to check if a key exists before accessing its value. Finally, a foreach loop is used to iterate over all key-value pairs in the dictionary and print them.

c-sharp
dictionary
generic-collections