【C#】C#プログラミングのイディオム(7章)ディクショナリの操作
前回の話
基礎編もあと2章。次はディクショナリ。 業務アプリでは、データベースより取得した値や、内部でkey-valueで処理した方が良い時に利用しています。
ただ、あまり詳細なことを知らずに使っていた部分もあったので、書籍を読みながら振り返ります。
本章の内容 * Dictionaryの基本操作 * ディクショナリの応用 * サンプル(Abbreviationsクラス)
この章の前半はMicrosoftのリファレンスなどを参考するとわかりやすい。
/* pre C# 5.0 */ var flowerDict = new Dictionary<string, int>(){ {"sunflower", 400}, {"pansy", 300}, {"tulip", 250}, {"rose", 500}, {"dahlia", 450}, }; /* after C# 6.0 */ var flowerDict2 = new Dictionary<string, int>(){ ["sunflower"] = 400, ["pansy"]= 300, ["tulip"]= 250, ["rose"]= 500, ["dahlia"]= 450, }; // Add Dictionary Plus flowerDict.Add("himawari", 400); /*KeyとValueで分けないと、Dictionaryの値がそのまま出力される*/ foreach (var s in flowerDict) { Console.WriteLine(s); } /*Keyとvalueに分ければ、それぞれの値を利用可能*/ foreach (KeyValuePair<string, int> item in flowerDict) { Console.WriteLine("{0} = {1}", item.Key, item.Value); } flowerDict2["piti"] = 600; /*指定したキーの値がないものをそのまま利用すると、KeyNotFoundExceptionが発生*/ Console.WriteLine(flowerDict["xx"]); /*回避するには、ContainsKeyを利用し存在チェックをするか、TryでExceptionを捕まえる*/ /*指定したキーに該当する値があるか*/ Console.WriteLine(flowerDict.ContainsKey("xx"));
通常のaddやremoveも利用しますが、Exceptionを発生させない方法を覚えておく。
タイプ | keyの重複 | 格納する値 |
---|---|---|
List | 可能 | なんでもOK |
HashSet | 不可 | key |
Dictionary | 不可 | key,value |
Dictioonaryもkeyの重複はNGだが、valueのところをListやカスタムクラスを利用し、 keyに対するvalueを複数持たせることも可能で、 value に List型を指定すれば良い。
Listなら dict["xxx"].Add(value); と値を設定可能。
DictionaryのvalueにDictionaryを使う、多重構造もかけると思いますが、 記述すると複雑に・・・。 それよか、valueにクラスなどカスタマイズしたものを配置してコントロールした方が よさげです。
この章はざっと書いてありましたが、コーディングして身につけるのが一番の近道かと思います。
次は8章の時刻か・・・
つづく
実戦で役立つ C#プログラミングのイディオム/定石&パターン
posted with amazlet at 18.09.09