ToDictionary
This C# extension method converts a collection into a Dictionary
. It works on IEnumerable
collections such as arrays and Lists.
We can use ToDictionary
to optimize performance—while retaining short
and clear code. This method simplifies the demands of the code.
Building up dictionaries can require a significant amount of code. When we use ToDictionary
, we can use less code to create a Dictionary
.
Dictionary
.ToDictionary
. The 2 arguments to ToDictionary
are lambdas: the first sets each key, and the second sets each value.using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { // Part 1: create example integer array. int[] values = new int[] { 1, 3, 5, 7 }; // Part 2: call ToDictionary. // Part 3: specify lambda as argument. Dictionary<int, bool> dictionary = values.ToDictionary(v => v, v => true); // Display all keys and values. foreach (KeyValuePair<int, bool> pair in dictionary) { Console.WriteLine(pair); } } }[1, True] [3, True] [5, True] [7, True]
String
exampleDictionaries are most useful for strings and string
lookups. This allows us to use a number (hash code) in place of a string
, greatly speeding things up.
var
keyword to simplify the syntax. Var helps reduce repetitive syntax.using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { // Example with strings and List. List<string> list = new List<string>() { "cat", "dog", "animal" }; var animals = list.ToDictionary(x => x, x => true); if (animals.ContainsKey("dog")) { // This is in the Dictionary. Console.WriteLine("dog exists"); } } }dog exists
IEqualityComparer
The ToDictionary
method can receives a third argument, an IEqualityComparer
. Here we use StringComparer.OrdinalIgnoreCase to create a case-insensitive dictionary.
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { List<string> list = new List<string>() { "cat", "bird" }; // Create case-insensitive dictionary. var pets = list.ToDictionary(x => x, x => true, StringComparer.OrdinalIgnoreCase); if (pets.ContainsKey("CAT")) { Console.WriteLine("CAT exists"); } } }CAT exists
ToDictionary
allows us to use fewer lines of code to insert elements into a Dictionary
. This method is elegant and fits well with other LINQ code.
We used ToDictionary
to transform a collection (such as an array or List
) into a Dictionary
collection. This provides constant-time lookups.