c# Dictionary: 宣言で大文字小文字を区別しないキーにする
質問内容
私は
Dictionary<string, object>
という辞書があります。 以前は
Dictionary<Guid, object>
であったが、他の「識別子」が登場したため、Keyは文字列として扱われるようになった。
問題なのは
Guid
というキーが、ソースデータから
VarChar
であるため、現在
"923D81A0-7B71-438d-8160-A524EA7EFA5E"
は
"923d81a0-7b71-438d-8160-a524ea7efa5e"
(と同じです(Guidsを使うときは問題ありませんでした)。
.NETフレームワークの本当にいいところ(甘いところ)は、これができることです。
Dictionary<string, CustomClass> _recordSet = new Dictionary<string, CustomClass>(
StringComparer.InvariantCultureIgnoreCase);
で、これはうまくいく。しかし、ネストされた辞書はどうでしょうか? 次のような感じです。
Dictionary<int, Dictionary<string, CustomClass>> _customRecordSet
= new Dictionary<int, Dictionary<string, CustomClass>>();
このようなネストされた辞書の文字列比較器はどのように指定するのでしょうか?
どのように解決するのですか?
外側の辞書に要素を追加する場合、入れ子の辞書の新しいインスタンスを作成することが多いと思いますが、この時点で追加し、外側の辞書の
オーバーロードされたコンストラクタ
を利用して追加します。
IEqualityComparer<TKey>
.
_customRecordSet.Add(0, new Dictionary<string, CustomClass>(StringComparer.InvariantCultureIgnoreCase));
2017/03/08に更新しました。
逸話ですが、どこか("Writing High-Performance .NET Code"で読んだと思います)で、次のように書いてありました。
StringComparer.OrdinalIgnoreCase
の方が、単純に文字の大文字小文字を無視したい場合には効率的である。しかし、これは私自身にはまったく根拠がないので、YMMV です。
関連
-
[解決済み】「namespace」なのに「type」のように使われる。
-
[解決済み] 与えられたキーがすでに辞書に存在するかどうかをチェックする
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] Vimで大文字小文字を区別しない検索をする方法
-
[解決済み] 辞書をキーでソートするにはどうしたらいいですか?
-
[解決済み] ディクショナリーで最大値を持つキーを取得する?
-
[解決済み] 辞書の値でキーを取得する
-
[解決済み] 大文字と小文字を区別しない文字列比較を行うにはどうすればよいですか?
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】"指定されたパスのフォーマットはサポートされていません。"
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】汎用辞書の大文字・小文字を区別しないアクセス方法
-
[解決済み] C#の文字列キータイプで大文字小文字を区別する辞書