StringComparer
আপনি যে মুহুর্তে মূল্য পাওয়ার চেষ্টা করছেন সেখানে নির্দিষ্ট করার কোনও উপায় নেই । আপনি যদি এটির বিষয়ে চিন্তা করেন "foo".GetHashCode()
এবং "FOO".GetHashCode()
সম্পূর্ণ ভিন্ন হন তবে কোনও কেস-সংবেদনশীল হ্যাশ মানচিত্রে কোনও কেস-সংবেদনশীল প্রাপ্তিকে কার্যকর করতে পারে এমন কোনও যুক্তিযুক্ত উপায় নেই।
আপনি তবে প্রথমে কেস-সংবেদনশীল অভিধান তৈরি করে এই ব্যবহার করতে পারেন:
var comparer = StringComparer.OrdinalIgnoreCase;
var caseInsensitiveDictionary = new Dictionary<string, int>(comparer);
বা বিদ্যমান কেস-সংবেদনশীল অভিধানের বিষয়বস্তু সহ একটি নতুন কেস-সংবেদনশীল অভিধান তৈরি করুন (যদি আপনি নিশ্চিত হন যে কোনও ক্ষেত্রে সংঘর্ষের ঘটনা নেই): -
var oldDictionary = ...;
var comparer = StringComparer.OrdinalIgnoreCase;
var newDictionary = new Dictionary<string, int>(oldDictionary, comparer);
এই নতুন অভিধান তারপর ব্যবহার GetHashCode()
উপর বাস্তবায়ন StringComparer.OrdinalIgnoreCase
যাতে comparer.GetHashCode("foo")
এবং comparer.GetHashcode("FOO")
আপনি একই মান দিতে।
পর্যায়ক্রমে, অভিধানে যদি কয়েকটি কয়েকটি উপাদান থাকে এবং / অথবা আপনার কেবল একবার বা দুবার অনুসন্ধান করতে হয় তবে আপনি মূল IEnumerable<KeyValuePair<TKey, TValue>>
অভিধানটিকে একটি হিসাবে বিবেচনা করতে পারেন এবং কেবল এটির পুনরাবৃত্তি করতে পারেন: -
var myKey = ...;
var myDictionary = ...;
var comparer = StringComparer.OrdinalIgnoreCase;
var value = myDictionary.FirstOrDefault(x => String.Equals(x.Key, myKey, comparer)).Value;
বা আপনি যদি পছন্দ করেন তবে লিনকিউ ছাড়াই: -
var myKey = ...;
var myDictionary = ...;
var comparer = StringComparer.OrdinalIgnoreCase;
int? value;
foreach (var element in myDictionary)
{
if (String.Equals(element.Key, myKey, comparer))
{
value = element.Value;
break;
}
}
এটি আপনাকে একটি নতুন ডেটা কাঠামো তৈরির ব্যয় সাশ্রয় করে, কিন্তু বিনিময়ে একটি অনুসন্ধানের জন্য ও (1) এর পরিবর্তে ও (এন) হয়।