Sort Dictionary. Dictionary has no Sort method. If we need to loop through the Dictionary contents in sorted order, we must separately acquire the elements and sort them.
using System;
using System.Collections.Generic;
using System.Linq;
// Step 1: create dictionary.
var dictionary = new Dictionary<string, int>();
dictionary.Add("car", 2);
dictionary.Add("zebra", 0);
dictionary.Add("apple", 1);
// Step 2: get keys and sort them.
var list = dictionary.Keys.ToList();
list.Sort();
// Step 3: loop through keys.
foreach (var key in list)
{
Console.WriteLine("{0}: {1}", key, dictionary[key]);
}apple: 1
car: 2
zebra: 0
Sort values. This program adds keys to a Dictionary and then sorts them by their values. Dictionary instances are not initially sorted. We use the orderby keyword in a query statement.
using System;
using System.Collections.Generic;
using System.Linq;
// Example dictionary.
var dictionary = new Dictionary<string, int>(5);
dictionary.Add("cat", 1);
dictionary.Add("dog", 0);
dictionary.Add("mouse", 5);
dictionary.Add("eel", 3);
dictionary.Add("programmer", 2);
// Order by values.// ... Use LINQ to specify sorting by value.
var items = from pair in dictionary
orderby pair.Value ascending
select pair;
// Display results.
foreach (KeyValuePair<string, int> pair in items)
{
Console.WriteLine("{0}: {1}", pair.Key, pair.Value);
}
// Reverse sort.// ... Can be looped over in the same way as above.
items = from pair in dictionary
orderby pair.Value descending
select pair;dog: 0
cat: 1
programmer: 2
eel: 3
mouse: 5
OrderBy. Another option is the OrderBy extension method in System.Linq. This approach compiles to the same code as the orderby query expression.
Tip Here the syntax is shorter. It requires only one lambda expression and method call.
using System;
using System.Collections.Generic;
using System.Linq;
var items = new Dictionary<int, int>();
items.Add(-1, 0);
items.Add(0, 1);
items.Add(-2, 0);
items.Add(3, 1);
// Use OrderBy method.
foreach (var item in items.OrderBy(i => i.Key))
{
Console.WriteLine(item);
}[-2, 0]
[-1, 0]
[0, 1]
[3, 1]
Notes, other methods. Other methods I found involve more steps, code or complexity. There is nothing wrong with those methods, although they vary in efficiency.
Sort string values. Sorting strings would work just as well. Sort() uses the interface implementations of the types. Its syntax is the same for any type that List.Sort() could sort.
Summary. Dictionary is optimized for fast lookups, not for specific looping mechanisms. It helps in lookup-heavy programs, but hinders programs that require sorted keys.
Dot Net Perls is a collection of tested code examples. Pages are continually updated to stay current, with code correctness a top priority.
Sam Allen is passionate about computer languages. In the past, his work has been recommended by Apple and Microsoft and he has studied computers at a selective university in the United States.
This page was last updated on Oct 26, 2023 (simplify).