কীভ্যালিউপায়ার তালিকা এবং একই ধরণের অভিধানের মধ্যে পার্থক্য কী? একটি বা অন্য ব্যবহার করার উপযুক্ত সময় কি আছে?
উত্তর:
যখন আপনার কীতে দ্রুত অনুসন্ধানের প্রয়োজন হবে না - ব্যবহৃত হ্যাশ টেবিল বজায় রাখার Dictionaryএকটি নির্দিষ্ট ওভারহেড থাকে।
সংক্ষেপে, তালিকাটি কীটির স্বতন্ত্রতা প্রয়োগ করে না, সুতরাং আপনার যদি সেই শব্দার্থবিজ্ঞানের প্রয়োজন হয় তবে এটি আপনার ব্যবহার করা উচিত।
অভিধান হল জেনেরিক টাইপ যে কী-মান জোড়া একটি সংগ্রহ রয়েছে। অভিধান অনুসন্ধানের কাজগুলির জন্য দ্রুত, কারণ অভ্যন্তরীণভাবে হ্যাশ ফাংশনটি ব্যবহার করছে । তার মানে, সমস্ত কীগুলি অভিধানে অনন্য হতে হবে ।
এই উদাহরণগুলি বিবেচনা করুন:
List<KeyValuePair<int, string>> pairs = new List<KeyValuePair<int, string>>();
pairs.Add(new KeyValuePair<int, string>(1, "Miroslav"));
pairs.Add(new KeyValuePair<int, string>(2, "Naomi"));
pairs.Add(new KeyValuePair<int, string>(2, "Ingrid"));
Dictionary<int, string> dict = new Dictionary<int, string>();
dict.Add(1, "Miroslav");
dict.Add(2, "Naomi");
dict.Add(2, "Ingrid"); // System.ArgumentException: An item with the same key has already been added.
সুতরাং আপনার সর্বদা দুটি কমপক্ষে দুটি বিষয় বিবেচনা করা উচিত:
আপনি যখন আইটেমগুলির ক্রম সম্পর্কে যত্নশীল হন তখন তালিকাটিও কার্যকর হবে।
ফিলিপ নাগানের উত্তর, এসওএপি বা অন্যথায় আপনি আইডিকেয়ার প্রয়োগ করে এমন বস্তুগুলিকে এক্সএমএল সিরিয়ালাইজ করতে পারবেন না।
প্রশ্ন: আমি কেন হ্যাশ টেবিল সিরিয়াল করতে পারি না?
উত্তর: এক্সএমএলসিরাইজার আইডোরিয়াস ইন্টারফেস প্রয়োগের ক্লাসগুলি প্রক্রিয়া করতে পারে না। এটি আংশিক সময়সূচী বাধার কারণে এবং আংশিকভাবে XSD টাইপ সিস্টেমে কোনও হ্যাশটেবলের কোনও অংশ নেই বলে এই কারণে হয়েছিল was একমাত্র সমাধান হ'ল একটি কাস্টম হ্যাশটেবল বাস্তবায়ন যা আইডোরিয়াস ইন্টারফেসটি বাস্তবায়িত করে না।
সিলভারলাইটের জন্য এসওএপি ওয়েবসার্চিতে আমরা খুঁজে পেয়েছি যে অভিধানগুলি সিরিয়াল করে না। এটি এমন একটি পরিস্থিতি হবে যেখানে আপনি অভিধানের উপর কীভ্যালিউপায়ার তালিকা ব্যবহার করবেন।
।
Http://blogs.msdn.com/bclteam/archive/2004/09/03/225473.aspx থেকে :
KeyValuePairবনাম।DictionaryEntry
[ক্রিজিসটফ কোয়ালিনা]আমরা বাস্তবায়ন নিয়ে একটি সমস্যা নিয়ে আলোচনা
IEnumerableউপরDictionary<K,V>। কি ধরণেরIEnumerable.GetEnumerator().Currentফিরে আসা উচিত ?KeyValuePair<K,V>বাDictionaryEntry? একই জন্যICollection.CopyTo। কোন ধরণের উদাহরণগুলি অ্যারেতে অনুলিপি করা উচিত?আমরা নিম্নলিখিতটি স্থির করেছি:
IEnumerableএবংICollectionইন্টারফেস বাস্তবায়নগুলিKeyValuePair<K,V>আইটেমের ধরণ হিসাবে ব্যবহার করবে ।IDictionaryনির্দিষ্ট সদস্য (GetEnumeratorপ্রত্যাবর্তনIDictionaryEnumerator)DictionaryEntryআইটেম ধরণ হিসাবে ব্যবহার করবে ।কারণটি হ'ল আমরা এমন পরিবর্তন
IEnumerator<T>আনতে চলেছি যেখানে প্রসারিত হবেIEnumerator।Dictionary<K,V>->IEnumerable<T>-> থেকে শ্রেণিবিন্যাসের পদচারণা করা খুব অবাক হবেIEnumerablewe