[ VB.NET / C# ] Dictionary キー:大文字・小文字を区別しない ( StringComparer )

Pocket

Dictionary クラスのキーに string を使用するときには、デフォルトでは大文字・小文字は区別されますが、ここでは、大文字・小文字を区別をしないで、同一のキーとして扱う Dictionary のサンプルコードを掲載しています。

スポンサーリンク

Dictionary キー:大文字・小文字の区別あり

以下のように Dictionary のキーはデフォルトで、大文字・小文字を区別しますので、下記のサンプルコードはどちらも正常にデータが追加されます。

VB.NET

Dim d As New Dictionary(Of String, String)()

d.Add("key", "1")  ' 正常に追加される
d.Add("KEY", "2")  ' 正常に追加される

C#

Dictionary<string, string> d = new Dictionary<string, string>();

d.Add("key", "ショーンケー"); // 正常に追加される
d.Add("KEY", "オグラケー");   // 正常に追加される

Dictionary キー:大文字・小文字の区別なし

では、次に key と KEY は同一のキーとして判断するサンプルコードです。Dictionary 生成時にパラメータを与えるだけですので、お手軽です。

例えば Windows では、ファイル名は大文字・小文字の区別はされませんので、そのようなデータをキーとして扱うときに便利かもしれません。

VB.NET

' 大文字・小文字の区別を行わないように Dictionary を生成
Dim d As New Dictionary(Of String, String)(StringComparer.OrdinalIgnoreCase)

d.Add("test", "1")

' すでに同一のキーが存在すると判断される
If (d.ContainsKey("TEst")) Then
    Console.WriteLine("exists")
End If

' ★ この位置で例外が発生します
d.Add("TEST", "2")

' System.ArgumentException はハンドルされませんでした。
' Message = 同一のキーを含む項目が既に追加されています。

C#

// 大文字・小文字の区別を行わないように Dictionary を生成
Dictionary<string, string> d = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);

d.Add("test", "1"); 

// すでに同一のキーが存在すると判断される
if (d.ContainsKey("TEst"))
{
    Console.WriteLine("exists");
}

// ★ この位置で例外が発生します
d.Add("TEST", "2");
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *