C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Next: The ToList and Sort methods are used on the Keys. The resulting List is looped through using the foreach-loop construct.
ListForeachVar: The var implicit typed keyword is used throughout to reduce syntactic redundancy.
VarC# program that sorts keys in Dictionary
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
// Create dictionary and add five keys and values.
var dictionary = new Dictionary<string, int>();
dictionary.Add("car", 2);
dictionary.Add("apple", 1);
dictionary.Add("zebra", 0);
dictionary.Add("mouse", 5);
dictionary.Add("year", 3);
// Acquire keys and sort them.
var list = dictionary.Keys.ToList();
list.Sort();
// Loop through keys.
foreach (var key in list)
{
Console.WriteLine("{0}: {1}", key, dictionary[key]);
}
}
}
Output
apple: 1
car: 2
mouse: 5
year: 3
zebra: 0
Example: The dictionary has string keys, and int values. We will reorder the values to go from lowest to highest.
Query: It displays results, using foreach to iterate through and display each KeyValuePair. No additional lookups are required.
LINQKeyValuePairNote: Thanks to Jon Senchyna for improving the query expression. It is more efficient to use the collection of KeyValuePairs.
C# program that sorts Dictionary
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
// 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;
}
}
Output
dog: 0
cat: 1
programmer: 2
eel: 3
mouse: 5
Tip: Here the syntax is shorter. It requires only one lambda expression and method call.
LambdaExceptions: The program could (with certain changes) raise a KeyNotFoundException. We can trap those errors with exception handling.
ExceptionNote: Thanks to Even Holen for writing in with an example of the shorter OrderBy syntax form.
C# program that uses OrderBy method
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main()
{
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);
}
}
}
Output
[-2, 0]
[-1, 0]
[0, 1]
[3, 1]
Descending sort:
var items = from pair in dictionary
orderby pair.Value descending
select pair;
Output
mouse: 5
eel: 3
programmer: 2
cat: 1
dog: 0