প্রশ্নের উত্তর দেওয়ার জন্য প্রথমে আমাদের অভিধানের মূল উদ্দেশ্য এবং অন্তর্নিহিত প্রযুক্তির দিকে নজর দেওয়া দরকার।
Dictionary
KeyValuePair<Tkey, Tvalue>
প্রতিটি মানটিকে তার অনন্য কী দ্বারা প্রতিনিধিত্ব করা হয় এমন তালিকা । ধরা যাক আমাদের কাছে আপনার পছন্দসই খাবারের একটি তালিকা রয়েছে। প্রতিটি মান (খাবারের নাম) তার অনন্য কী দ্বারা উপস্থাপিত হয় (একটি অবস্থান = আপনি এই খাবারটি কতটা পছন্দ করেন)।
উদাহরণ কোড:
Dictionary<int, string> myDietFavorites = new Dictionary<int, string>()
{
{ 1, "Burger"},
{ 2, "Fries"},
{ 3, "Donuts"}
};
যাক আপনি সুস্থ থাকতে চান, আপনি আপনার মতামত পরিবর্তন করেছেন এবং আপনি আপনার প্রিয় "বার্গার" সালাদ দিয়ে প্রতিস্থাপন করতে চান। আপনার তালিকাটি এখনও আপনার পছন্দের তালিকাগুলি, আপনি তালিকার প্রকৃতি পরিবর্তন করবেন না। আপনার প্রিয় তালিকার এক নম্বর স্থানে থাকবে, কেবলমাত্র এর মান পরিবর্তন হবে। আপনি যখন এই কল করবেন এটি এই:
/*your key stays 1, you only replace the value assigned to this key
you alter existing record in your dictionary*/
myDietFavorites[1] = "Salad";
তবে ভুলে যাবেন না আপনি প্রোগ্রামার, এবং এখন থেকে আপনি আপনার বাক্যগুলি সমাপ্ত করে; আপনি ইমোজিগুলি ব্যবহার করতে অস্বীকার করেছেন কারণ তারা সংকলন ত্রুটি ছুঁড়ে ফেলবে এবং সমস্ত পছন্দের তালিকা 0 সূচক ভিত্তিক।
আপনার ডায়েটও বদলে গেল! সুতরাং আপনি আবার আপনার তালিকা পরিবর্তন করুন:
/*you don't want to replace Salad, you want to add this new fancy 0
position to your list. It wasn't there before so you can either define it*/
myDietFavorites[0] = "Pizza";
/*or Add it*/
myDietFavorites.Add(0, "Pizza");
সংজ্ঞায়নের দুটি সম্ভাবনা রয়েছে, আপনি হয় অস্তিত্বহীন কোন কিছুর জন্য একটি নতুন সংজ্ঞা দিতে চান বা আপনি ইতিমধ্যে বিদ্যমান সংজ্ঞাটি পরিবর্তন করতে চান।
অ্যাড পদ্ধতি আপনাকে একটি রেকর্ড যুক্ত করতে দেয় তবে কেবলমাত্র একটি শর্তাধীন: এই সংজ্ঞাটির কী আপনার অভিধানে উপস্থিত থাকতে পারে exist
এখন আমরা ফণা অধীন দেখতে যাচ্ছি। আপনি যখন কোনও অভিধান তৈরি করছেন তখন আপনার সংকলক বালতিটির জন্য সংরক্ষণ করুন (আপনার রেকর্ড সংরক্ষণের জন্য মেমরির ফাঁকা জায়গা)। বালতি কীভাবে আপনার সংজ্ঞা দেয় সেভাবে সংরক্ষণ করবেন না। বালিতে যাওয়ার আগে প্রতিটি কী হ্যাশ করা হয় (মাইক্রোসফ্ট দ্বারা সংজ্ঞায়িত), উল্লেখযোগ্য যে মান অংশটি অপরিবর্তিত থাকে।
আমি আমার উদাহরণটি সহজ করার জন্য সিআরসি 32 হ্যাশিং অ্যালগরিদম ব্যবহার করব। আপনি যখন সংজ্ঞা দিচ্ছেন:
myDietFavorites[0] = "Pizza";
বালতিতে যা হচ্ছে তা হ'ল db2dc565 "পিজ্জা" (সরলীকৃত)।
আপনি যখন এর সাথে মানটি পরিবর্তন করেন:
myDietFavorites[0] = "Spaghetti";
আপনি আপনার 0 টি হ্যাশ করেছেন যা আবার db2dc565 তবে আপনি নিজের বালতিতে এই খুঁজে পেয়েছেন কিনা তা খুঁজে বের করতে। যদি এটি সেখানে থাকে তবে আপনি কীটির জন্য নির্ধারিত মানটি পুনরায় লিখুন। যদি এটি না থাকে তবে আপনি নিজের মানটি বালতিতে রাখবেন।
আপনি যখন আপনার অভিধানটিতে যুক্ত ফাংশনটিকে কল করবেন তখন:
myDietFavorite.Add(0, "Chocolate");
বালতিতে থাকা মানগুলির সাথে এর মানটির তুলনা করতে আপনি আপনার 0 টি হ্যাশ করেছেন। এটি বালতিতে না থাকলে কেবল এটি থাকতে পারে ।
এটি কীভাবে কাজ করে তা বিশেষত যদি আপনি স্ট্রিংয়ের অভিধানগুলি বা চর ধরণের কী ব্যবহার করে থাকেন তা জেনে রাখা গুরুত্বপূর্ণ। এটি হ্যাশিংয়ের কারণে কেস সংবেদনশীল। সুতরাং উদাহরণস্বরূপ "নাম"! = "নাম"। এটি চিত্রিত করতে আমাদের সিআরসি 32 ব্যবহার করুন।
"নাম" এর মান: e04112b1
"নাম" এর মান: 1107fb5b