C#でDictionary(ディクショナリ)を反復処理する方法を解説
C#でDictionary(ディクショナリ)の全要素を反復処理するには、いくつかの方法があります。ここでは、キーの一覧を取得してループ処理する基本的な手順を、サンプルコード付きでわかりやすく解説します。
1. ディクショナリに要素を追加する
まず、IDictionary<int, int>型のディクショナリを作成し、Addメソッドで要素を追加します。
IDictionary<int, int> d = new Dictionary<int, int>(); d.Add(1, 97); d.Add(2, 89); d.Add(3, 77); d.Add(4, 88);
2. キーの一覧を取得する
Keysプロパティを使うと、ディクショナリに格納されているすべてのキーを取得できます。取得したキーのコレクションは、そのままList<int>に渡すことでリスト化できます。
List<int> myList = new List<int>(d.Keys);
3. foreachで反復処理する
キーの一覧をforeachループで順番に取り出しながら、キーをインデックスとして対応する値へアクセスします。
foreach (int k in myList) {
Console.WriteLine("{0}, {1}", k, d[k]);
}
サンプルコード全体
以下は、これまでの手順をまとめた完全なサンプルプログラムです。
using System;
using System.Collections.Generic;
public class Demo {
public static void Main() {
IDictionary<int, int> d = new Dictionary<int, int>();
d.Add(1, 97);
d.Add(2, 89);
d.Add(3, 77);
d.Add(4, 88);
List<int> myList = new List<int>(d.Keys);
foreach (int k in myList) {
Console.WriteLine("{0}, {1}", k, d[k]);
}
}
}
実行結果
1, 97 2, 89 3, 77 4, 88
補足:KeyValuePairを使ったより簡潔な方法
実際には、キーの一覧を別途作成しなくても、KeyValuePair構造体を使えばディクショナリを直接反復処理できます。
foreach (KeyValuePair<int, int> pair in d) {
Console.WriteLine("{0}, {1}", pair.Key, pair.Value);
}
この方法ではコードがシンプルになり、余計なリスト生成も発生しないため、パフォーマンス面でも有利です。用途に応じて両者の方法を使い分けるとよいでしょう。
-
Pythonでネストされた辞書を再帰的に反復処理する方法
Pythonでは、辞書(dict)の中にさらに辞書が入れ子になった「ネストされた辞書」を扱うことがあります。このような多層構造のデータをすべて走査するには、再帰的なアプローチが最も効果的です。 以下は、ネストされた辞書オブジェクトの例です。 D1={1: {2: {3: 4, 5: 6}, 3: {4: 5, 6: 7}}, 2: {3: {4: 5}, 4: {6: 7}}} 再帰関数による反復処理 各キーに対応する値が辞書そのものである場合は、同じ関数を再帰的に呼び出して、より深い階層へと処理を進めます。値が辞書でない場合は、そのキーと値を出力します。 def iterdict(d): &
-
Pythonで辞書を反復処理する2つの方法をわかりやすく解説
Pythonの辞書(dict)オブジェクトを反復処理する方法は主に2つあります。1つ目は、keys()メソッドでキーのリストを取得し、各キーに対応する値を取り出す方法です。keys()メソッドを使った反復処理>>> D1 = {1:a, 2:b, 3:c} >>> for k in D1.keys(): print (k, D1[k]) 1 a 2 b 3 c keys()メソッドは辞書内のすべてのキーを返します。ループ内でキーを変数kに受け取り、D1[k]のように記述することで、そのキーに関連付けられた値へアクセスできます。items()メソッドを