C#でDictionary(辞書)をキーや値でソートする方法
C#のDictionaryをソートする基本の手順
C#でDictionary(辞書)の中身を並べ替えて表示したい場合、「キーの一覧を取得してソートし、その順序で値を取り出す」というのが基本的なアプローチです。ここでは、具体的な手順をサンプルコード付きで解説します。
1. キーと値を持つDictionaryを作成する
まず、Dictionary<string, int>型の変数を作成し、Addメソッドでキーと値のペアを追加します。
var d = new Dictionary<string, int>();
d.Add("Zack", 0);
d.Add("Akon", 3);
d.Add("Jack", 2);
d.Add("Tom", 1);
2. キーを取得してソートする
次に、KeysプロパティですべてのキーをListとして取得し、Sortメソッドで昇順に並べ替えます。
var val = d.Keys.ToList(); val.Sort();
サンプルコード全体
以下のコードを実行すると、Dictionaryのエントリがキーのアルファベット順にソートされて出力されます。
using System;
using System.Collections.Generic;
using System.Linq;
class Demo {
static void Main() {
var d = new Dictionary<string, int>();
d.Add("Zack", 0);
d.Add("Akon", 3);
d.Add("Jack", 2);
d.Add("Tom", 1);
// キーを取得してソートする
var val = d.Keys.ToList();
val.Sort();
// ソート済みのキーをループして表示
foreach (var key in val) {
Console.WriteLine("{0}: {1}", key, d[key]);
}
}
}
実行結果
Akon: 3 Jack: 2 Tom: 1 Zack: 0
補足:値(Value)でソートしたい場合
キーではなく値を基準に並べ替えたい場合は、LINQのOrderByメソッドを使うと簡単です。次のように記述すると、値の昇順でエントリを列挙できます。
foreach (var kvp in d.OrderBy(x => x.Value)) {
Console.WriteLine("{0}: {1}", kvp.Key, kvp.Value);
}
この場合、出力は値の小さい順(0 → 1 → 2 → 3)になります。逆に降順で並べたいときは、OrderByDescendingを使用してください。用途に応じてキー・値どちらのソートも使い分けると、Dictionaryをより柔軟に扱えるようになります。
-
Pythonで辞書のリストを値でソートする方法|sorted関数とlambdaの使い方
本記事では、複数の辞書を格納したリストを、各辞書が持つ値(value)に基づいて並べ替える方法を解説します。 サンプルとして使う辞書には、「name(名前)」と「roll(出席番号)」という2つのキーが含まれています。まずはPythonの組み込み関数 sorted() とラムダ式(lambda)を組み合わせて、roll の値で昇順にソートした結果を表示します。 続いて、name と roll の両方を組み合わせた条件でのソート、そして roll の値で降順にソートする方法まで、順番に見ていきましょう。 サンプルコード # 辞書のリストを初期化 my_list1 = [{ name : A
-
Pythonで辞書の値をキーにして辞書のリストを並べ替える方法
sorted()関数を使った辞書リストのソートPythonには、イテラブル(反復可能オブジェクト)の要素を指定した順序で並べ替えるための組み込み関数 sorted() が用意されています。sorted(iterable[, key][, reverse])第2引数の key には関数を指定します。この関数の戻り値が、ソート時の比較キーとして使用されます。第3引数の reverse はデフォルトで False になっており、True を指定すると降順(大きい順)に並べ替えられます。lambda式でソートキーを指定する辞書のリストを並べ替える場合は、lambda式を使って「各辞書の特定のキーの値」