Categories: C#

Key-Value 形式のデータを扱う Dictionary クラス【C#】

C# で Key-Value 形式のコレクションを扱う上でよく使うのが Dictionary オブジェクトだよ。コレクションを扱うには System.Collections.Generic を using する必要があるので忘れずにね!

Dictionary オブジェクトの定義

例えば、TKey に string型、TValue にも string 型で指定した場合の Dictionary オブジェクトの定義はこんな感じ

var dict = new Dictionary<string, string>();

TValue に List を指定した例はこんな感じ

var dict = new Dictionary<string, List<int>>();

要素の追加

TKey、TValue 共に string とした場合の例として、Add メソッドで要素を追加するパターン

dict.Add("apple", "りんご");
dict.Add("banana", "バナナ");

ブラケットを使い要素を追加するパターン

dict["apple"] = "りんご";
dict["banana"] = "バナナ";

当然変数も使えるよ

string keyBanana = "banana";
string valueBanana = "ばなな";

dict.Add(keyBanana, valueBanana);

要素の取得

要素の取得にはブラケットを使うよ

Console.WriteLine(dict["banana"]);  // ばなな

変数で定義したキーでも取り出せるよ

Console.WriteLine(dict[keyBanana]);  // ばなな

Key と Value を列挙

foreach を使う。(そろそろ dict という変数名で背中が痒くなってきたので変更するよ。それとフルーツバスケットをDictionaryで管理する云々のツッコミはいらないからね!

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 をかけるとおそらく文字コードのテーブルに従ってソートを掛けられるので、特に日本語の場合想像通りの動きにはならないとは思いますが、とりあえず期待した動きになりそうな対象文字列がアルファベットでの例

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クラスの詳細

 

chrowa3

Share
Published by
chrowa3

Recent Posts

ざっくり ECMAScript 2020

ざっくりと ES2020 のお…

3年 ago

ざっくり ECMAScript 2019

ざっくりと ES2019 のお…

3年 ago

ざっくり ECMAScript 2018

ざっくりと ES2018 のお…

3年 ago

ざっくり ECMAScript 2017

ざっくりと ES2017 のお…

3年 ago

ざっくり ECMAScript 2016

ざっくりと ES2016 のお…

3年 ago

ざっくり ECMAScript 2015

ざっくりと ES2015 のお…

3年 ago