編的なショートセッションを...職場でやることにしたので、やる内容をメモです。SortedDictionary、SortedListをまとめました。IDeserializationCallbackの実装だよね」といったゴリゴリしたことは省略です。「キーとバリューをセットで保持できるんだよ。キーに基づいたバリューを検索したいときに便利だよ。」というのがわかりやすいところでしょうか。キーもバリューもジェネリクスなので、どんな値でも入ります。ありそうな実例っぽいものだと、「Webシステムでユーザーの情報をキャッシュしておくのにDictionaryを使う」とかでしょうか。ListやArrayなどのコレクションでもにたようなことはできますが、Dictionaryは以下の特徴があります。検索が早いオブジェクトの生成は遅い検索が早い理由は、内部でハッシュ値を持って、それを検索しているからです。TKeyをDictionaryに格納する際に、ハッシュ値を生成して内部で検索キーとして保持しています。基礎なので、Dictionaryの内部では、という構造体の配列をを保持しており....というゴリッゴリな内容は省略します。そんな構造してるから、オブジェクトの生成が遅いのは、そりゃそうだとなりますね。使用例の基礎これはどこにでも書いてあるので、MSDNにおまかせしましょう。使用例ただし、C#6.0からインデックス初期化子という機能ができて、よりいい感じで書けるようになりましたので、それは身につけましょう(という個人的思想)。具体的には、お兄さまのサイトにて見るのがよいです。ufcpp.netDictionaryをforeachすると...ここでちょっとしたTipsその1です。Dictionaryをforeachすると、KeyValuePairが取得されます。(「内部でstructの配列を保持してるのに、GetEnumeratorでKeyValuePair生成かいっっ」...てあんまり面白くなかったでしょうか...)比較規則のカスタマイズ...Tipsその2です。(正確にいうとは、評価されるのはそのキーのハッシュ値ですが...)の場合、Keyが存在しないので、exceptionが発生します。大文字小文字を「そんなの関係ねー」と叫んで検索したい場合は、コンストラクターでIEqualityComparerを渡してあげると、評価方法をカスタマイズして値をとることができます。ToDictionary拡張メソッドLinqのToDictionaryメソッドについても簡単にサンプルを書いておきます。以下のようなクラスがあるとします。そのリストをToDictionaryしたい場合、これだけです。SortedDictionary、SortedListIDictionaryの血筋(?)、Dictionaryには、実は兄弟がいます。TValue>これらは、ハッシュコードを使っていません。内容がソートされているので、そもそも高速に検索が可能です。二つとも共通して言えるのは、常にソートした値を保持するためオブジェクトの生成がおそーいです。この2つで何が違うかは...そもそもの構造が違います。SortedListは、KeyとValueにそれぞれIListインターフェースを実装して値をもっているので、多様な検索ができる分、キーの追加や削除をすると、値をがっつり移動しなければならないため、高コストになります。SortedDictionaryは、ツリー構造なので、SortedListより高速です。ツリー構造を持ってるだけにメモリの利用量が多いです。TValue>ができ、名前の通りReadOnlyです。大きなDictionaryを使うことが少ない私は個人的にこれを使うことが多いです。どれが優れているとかではないので、ケースバイケースでより目的にあったものを使いましょう。ヨガのポーズとその説明のデータを準備しました。当ブログに掲載されている情報は、必ずしも正確性や安全性を保証するものではありません。掲載された内容によって生じた損害等の一切の責任を負いかねます。当ブログに掲載されている情報は個人の見解であり、所属する団体・組織は一切関係ありません。スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。