2016.11.03
Key-Value 形式のデータを扱う Dictionary クラス【C#】
C# で Key-Value 形式のコレクションを扱う上でよく使うのが Dictionary オブジェクトだよ。コレクションを扱うには System.Collections.Generic を using する必要があるので忘れずにね!
Dictionary オブジェクトの定義
例えば、TKey に string型、TValue にも string 型で指定した場合の Dictionary オブジェクトの定義はこんな感じ
1 |
var dict = new Dictionary<string, string>(); |
TValue に List を指定した例はこんな感じ
1 |
var dict = new Dictionary<string, List<int>>(); |
要素の追加
TKey、TValue 共に string とした場合の例として、Add メソッドで要素を追加するパターン
1 2 |
dict.Add("apple", "りんご"); dict.Add("banana", "バナナ"); |
ブラケットを使い要素を追加するパターン
1 2 |
dict["apple"] = "りんご"; dict["banana"] = "バナナ"; |
当然変数も使えるよ
1 2 3 4 |
string keyBanana = "banana"; string valueBanana = "ばなな"; dict.Add(keyBanana, valueBanana); |
要素の取得
要素の取得にはブラケットを使うよ
1 |
Console.WriteLine(dict["banana"]); // ばなな |
変数で定義したキーでも取り出せるよ
1 |
Console.WriteLine(dict[keyBanana]); // ばなな |
Key と Value を列挙
foreach を使う。(そろそろ dict という変数名で背中が痒くなってきたので変更するよ。それとフルーツバスケットをDictionaryで管理する云々のツッコミはいらないからね!
1 2 3 4 5 6 7 8 |
var fruitsBasket = new Dictionary<string, string>(); fruitsBasket.Add("apple", "りんご"); fruitsBasket.Add("banana", "バナナ"); foreach(var fruits in fruitsBasket){ Console.WriteLine(fruits.Key + " : " + fruits.Value); } Console.ReadLine(); |
LINQ の OrderBy でソートをかける
文字列そのものに OrderBy をかけるとおそらく文字コードのテーブルに従ってソートを掛けられるので、特に日本語の場合想像通りの動きにはならないとは思いますが、とりあえず期待した動きになりそうな対象文字列がアルファベットでの例
1 2 3 4 5 6 7 8 9 10 11 12 |
var fruitsBasket = new Dictionary<string, string>(); fruitsBasket.Add("banana", "バナナ"); fruitsBasket.Add("apple", "りんご"); foreach(var fruits in fruitsBasket){ Console.WriteLine(fruits.Key + " : " + fruits.Value); // バナナ、りんご の順で表示 } foreach(var fruits in fruitsBasket.OrderBy(c=> c.Key)){ Console.WriteLine(fruits.Key + " : " + fruits.Value); // りんご、バナナの順で表示 } Console.ReadLine(); |
LINQについては別の記事で詳しく触れるよ。Dictionaryクラスの詳細