C#のLinqのメソッド一覧

【C# sharp Linq】Dictionaryの使い方 クラスやLinqと組み合わせる方法

Dictionary型について

今回のテーマ

こんばんは、サルモリです。

今回は下記のテーマについての記事を書いていこうと思います。

今回のテーマ

Dictionaryの使い方について解説。

今回はディクショナリーの使い方を解説します。リストや配列程、使う機会はないかもしれませんが、便利なので覚えていきましょう!

今回はDictionaryについて学ぶよ!
サルモリ

Dictionaryの初期化方法

まずはDictionaryの初期化方法を見ていきましょう。2パターンあるので、好きな方を選んでください。

今回の例では、ロボット名がキーで、それに対応する要素名が作成者とします。

初期化方法1

初期化方法2

このブログでは、初期化方法2を使っていきますね。

Dictionaryの要素の追加方法

要素の追加方法も2つあります。

要素の追加方法1

要素の追加方法2

要素の追加方法1では、既にキーが存在していた場合は、値が上書きされます。

追加方法2では、既にキーが存在していた場合、ArgumentException例外が発生するので注意が必要です。

このブログでは、追加方法1を使っていきます。

Dictionaryから要素を取り出す方法

続けて、要素の取り出し方です。下記のようにすれば、キーに対応した値を取り出すことができます。

指定したキーが無かった場合はKeyNotFoundException例外が発生するので、ContainsKeyメソッドを使うことで、キーが存在するかを確認することをおすすめします。

Dictionaryから要素を削除する方法

要素の削除方法を解説します。下記のようにRemoveメソッドを使用することで削除できます。

返り値はbool型で削除出来た場合はtrue、出来なかった場合はfalseを返します。

Dictionaryから全ての要素を取り出す方法

全ての要素を取り出す場合はforeachを使いましょう。キーの値はKeyを指定し、それに対応する要素の値はValueを指定します。

今までの処理を総まとめしたソースコードを記述します。

Dictionaryの使い方



 result
Dr Light
Roll:Dr Light
Airman:Dr Wily
Quickman:Dr Wily
Iceman:Dr Wily

全ての要素を取り出す時にforeachを使えるということは、Linqも使用することができます。

サルモリ
DictionaryもLinqを使用することができるよ!

Dictionary型にLinqを使用する

Dictionary型にLinqを使用した例

最後にLinqを使ってみた例を二つ紹介します。

行いたい処理

文字列の長さが7以上のロボット名と作成者を出力する。

Linqを使用する例



 result
Rockman:Dr Light
Quickman:Dr Wily
Fireman:Dr Wily

Linqを使用して、Whereで抽出した後にToDirectoryで再度、Directory型に戻しています。

上記のようにToDirectory内でそれぞれKeyとValueを指定することでDirectory型を再度作ることができます。

LinqのWhereについては下記の記事に書いています。

CHECK

【C# sharp Linq】Selectメソッド、Whereメソッドを解説します。

C#言語のLinqとは? はじめに こんばんは、サルモリです! 今回は下記の記事について書いていこうと思います。 今回のテーマ Linqの使い方を解説。SelectメソッドとWhereメソッドの使い方 ...

続きを見る

二つ目の例を見てみましょう。

行いたい処理

作成者がワイリーのロボット名を出力する。

Linqを使用する例



 result
Airman
Quickman
Iceman
Fireman

今回の例はロボット名の出力のみだったので、リストに変換して実現しました。

もちろん、Dictionary型に変換し、出力することもできます。時と場合に応じて、使い分けましょう。

Dictionary型にクラスを使用する

これからはクラスを定義し、クラスを格納したDictionary型の使い方をみていきましょう!

使い方を紹介する上でクラスの定義が必要なので、今回は下記のクラスを使用します。何回か使用したことがあるロボットクラスです。

使用するクラスの定義



Dictionaryに定義したクラスのオブジェクトを格納する

早速、上記のクラスをDictionaryに格納してみましょう。

今回はKeyをロボットコードとして、要素をロボットオブジェクトとして生成し、格納してみました。

Dictionaryからクラスで定義したオブジェクトを取り出す方法

クラスで定義したオブジェクトを取り出してみましょう。

クラスで定義したロボット名を出力



 result
0001:Rockman
0002:Roll
0003:Airman
0004:Quickman
0005:Iceman
0006:FIreman

今回の例では、キーの値と要素の中のロボット名を出力しています。

DictionaryでLinqを使用した例 OrderbyとGroupby

クラスで定義したオブジェクトに対して、Linqを使用してみましょう。

やりたい処理

強さ順に並べ替えたDictionaryを作成したい。

クラスで定義したロボット名を出力



 result
0001:Rockman:5
0004:Quickman:5
0005:Iceman:4
0006:FIreman:4
0003:Airman:3
0002:Roll:1

強さ順に並べ替えができました。

もう一つ、色でグループ分けしたDictionaryを作成してみましょう。

やりたい処理

色でグループ分けしたDictionaryを作成したい。

クラスで定義したロボット名を出力



 result
0001:Rockman:Blue
0003:Airman:Blue
0005:Iceman:Blue
------------------------
0002:Roll:Pink
------------------------
0004:Quickman:Red
0006:FIreman:Red
------------------------

色でグループ分けをすることができましたね。

配列、リストなどの記事はこちら

Linqを使用してリストからDictionary型への変換

最後にリストからDictionaryへの変換について解説します。

まず、下記のようにロボットのリストを作ってみました。

ロボットリスト



 result
Rockman
Roll
Airman
Quickman
Iceman
Fireman

上記のリストをLinqを使用してDictionary型に変換してみます。

ロボットリストをロボットDictionaryに変換



 result
Icemancolor = Blue
-------------------------------
Rockman:Blue:Dr Light
Roll:Pink:Dr Light
Airman:Blue:Dr Wily
Quickman:Red:Dr Wily
Iceman:Blue:Dr Wily
Fireman:Red:Dr Wily

上記のToDirectory内で何をしているか解説すると、キーをロボット名で定義しています。

なので、Directoryのキーをロボット名で指定すると対応した値を取り出すことが可能です。

下記の疑問についてもお答えします。

そもそもリストをDictionaryにする必要あるの?

仕事でプログラミングをしていた時、使う場面は結構あります。どの場面で使ったかというと、性能改善の時です。

Dictionary型にすると、キーを指定することで一発で要素の取得が出来るのでその特性を活かして、性能改善をすることができます。

サルモリ
キーを直接指定して要素を取り出せるのがDictionary型の強みだよ!

まとめ

今回もDictionary型について解説しました。最後のサルモリが言ってることがとても重要です。

開発では、配列、リストをメインに使うことが多いと思いますが、その時の課題に応じて、Dictionaryを使用することも視野にいれましょう。

今回の2記事でDictionaryを使いこなすことが出来ると思うので、何回も見直してぜひ覚えてください。

最後まで見て頂きありがとうございました。

サルモリ
最後までみてくれてありがとう!

今回はDictionary型について解説しました。

二つの要素を対応付けて管理したい場合などにとても強力ないないので、ぜひ覚えてください。

今回の記事では、Dictionary型について紹介しきれていないので、別記事でさらに掘り下げて解説していきたいと思います。

サルモリ
最後までみてくれてありがとう!

他のLinqの記事についてはこちら

 

-C#のLinqのメソッド一覧

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

Powered By
Best Wordpress Adblock Detecting Plugin | CHP Adblock