TheDeveloperBlog.com

Home | Contact Us

C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML

<< Back to C-SHARP

C# Case Insensitive Dictionary

Create a case-insensitive Dictionary with StringComparer.OrdinalIgnoreCase.
Case, Dictionary. A case-insensitive Dictionary is ideal in some programs. It helps with comparing file names in Windows, which ignore case.Dictionary
Notes, upper and lower. Sometimes user names are case-insensitive—upper and lower letters are treated as equal. We implement a case-insensitive string Dictionary.
An example. The Dictionary class has several overloaded constructors. Here we use one that accepts a parameter of type IEqualityComparer(string).

IEqualityComparer: This object implements an interface and is used by Dictionary to acquire hash codes and compare keys.

IEqualityComparer

New: We use a Dictionary constructor that accepts an IEqualityComparer. We specify StringComparer.OrdinalIgnoreCase as the comparer.

Methods: StringComparer.OrdinalIgnoreCase implements (at minimum) 2 methods, Equals and GetHashCode.

StringComparison, StringComparer

Info: These 2 methods are used internally by the Dictionary to compute hash keys and compare buckets.

C# program that uses case-insensitive Dictionary using System; using System.Collections.Generic; class Program { static void Main() { // Create case insensitive string Dictionary. var caseInsensitiveDictionary = new Dictionary<string, int>( StringComparer.OrdinalIgnoreCase); caseInsensitiveDictionary.Add("Cat", 2); caseInsensitiveDictionary.Add("Python", 4); caseInsensitiveDictionary.Add("DOG", 6); // Write value of "cat". Console.WriteLine(caseInsensitiveDictionary["CAT"]); // 2 // Write value of "PYTHON". Console.WriteLine(caseInsensitiveDictionary["PYTHON"]); // 4 // See if "dog" exists. if (caseInsensitiveDictionary.ContainsKey("dog")) { Console.WriteLine("Contains dog."); // <-- Displayed } // Enumerate all KeyValuePairs. foreach (var pair in caseInsensitiveDictionary) { Console.WriteLine(pair.ToString()); } } } Output 2 4 Contains dog. [Cat, 2] [Python, 4] [DOG, 6]
Notes, usage. You can add keys with either case using the Add method. The keys retain their original case internally in the Dictionary buckets.

And: When you enumerate the KeyValuePairs (in foreach), the original cases are retained.

Foreach

Caution: When you add the strings "Cat" and "CAT", you will get an exception. The Dictionary considers the 2 strings to be equivalent.

Note, ContainsKey. ContainsKey (along with TryGetValue) will accept keys of either case. So "PYTHON" will return the same value as "Python".ContainsKeyTryGetValue
A discussion. Another approach you can use to normalize string data in your Dictionary is always calling ToLower on the keys and before looking up keys.ToLower

File names: In Windows, file names are case-insensitive. But when users copy files, they expect them to retain their original case.

Thus: This Dictionary is ideal here. It will mimic the behavior of Windows NTFS filesystems.

A summary. We implemented a case-insensitive string Dictionary. You do not need to write your own IEqualityComparer, although if your requirements are slightly unusual you can do so.
© TheDeveloperBlog.com
The Dev Codes

Related Links:


Related Links

Adjectives Ado Ai Android Angular Antonyms Apache Articles Asp Autocad Automata Aws Azure Basic Binary Bitcoin Blockchain C Cassandra Change Coa Computer Control Cpp Create Creating C-Sharp Cyber Daa Data Dbms Deletion Devops Difference Discrete Es6 Ethical Examples Features Firebase Flutter Fs Git Go Hbase History Hive Hiveql How Html Idioms Insertion Installing Ios Java Joomla Js Kafka Kali Laravel Logical Machine Matlab Matrix Mongodb Mysql One Opencv Oracle Ordering Os Pandas Php Pig Pl Postgresql Powershell Prepositions Program Python React Ruby Scala Selecting Selenium Sentence Seo Sharepoint Software Spellings Spotting Spring Sql Sqlite Sqoop Svn Swift Synonyms Talend Testng Types Uml Unity Vbnet Verbal Webdriver What Wpf