আপনি কখন <টিভ্যালিউপিয়ার <টি 1, টি 2 >> একটি অভিধান <টি 1, টি 2> এর পরিবর্তে কোনও তালিকা ব্যবহার করবেন?


96

কীভ্যালিউপায়ার তালিকা এবং একই ধরণের অভিধানের মধ্যে পার্থক্য কী? একটি বা অন্য ব্যবহার করার উপযুক্ত সময় কি আছে?

উত্তর:


81

যখন আপনার কীতে দ্রুত অনুসন্ধানের প্রয়োজন হবে না - ব্যবহৃত হ্যাশ টেবিল বজায় রাখার Dictionaryএকটি নির্দিষ্ট ওভারহেড থাকে।


9
এছাড়াও তালিকা সন্নিবেশকরণ অপারেশনটি দ্রুততর যে অভিধানে রয়েছে
ভডিয়াম স্টেসিয়াক

4
এর ক্ষেত্রগুলি কেবল পঠনযোগ্য, তবে আপনি সর্বদা তালিকার পুরো উপাদানটি প্রতিস্থাপন করতে পারেন।
পাভেল মিনায়েভ


63

সংক্ষেপে, তালিকাটি কীটির স্বতন্ত্রতা প্রয়োগ করে না, সুতরাং আপনার যদি সেই শব্দার্থবিজ্ঞানের প্রয়োজন হয় তবে এটি আপনার ব্যবহার করা উচিত।


7
+1 নোট করুন যে অভিধানটি মানটির স্বতন্ত্রতা প্রয়োগ করে না!
gdoron মনিকা

25

অভিধান হল জেনেরিক টাইপ যে কী-মান জোড়া একটি সংগ্রহ রয়েছে। অভিধান অনুসন্ধানের কাজগুলির জন্য দ্রুত, কারণ অভ্যন্তরীণভাবে হ্যাশ ফাংশনটি ব্যবহার করছে । তার মানে, সমস্ত কীগুলি অভিধানে অনন্য হতে হবে

এই উদাহরণগুলি বিবেচনা করুন:

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.

সুতরাং আপনার সর্বদা দুটি কমপক্ষে দুটি বিষয় বিবেচনা করা উচিত:

  1. আপনি কি অভিধানে কংক্রিট আইটেম অনুসন্ধান করতে চান?
  2. আপনি কি কিছু ক্ষেত্র অ-অনন্য থাকতে চান (উদাহরণস্বরূপ জোড়: প্রথম নাম / পদবি)।

4
আমি মনে করি এখানে মূল বক্তব্যটি হ'ল অভিধান কীগুলি অবশ্যই অনন্য হতে হবে যেখানে তালিকার <কেভ্যালিউপায়ার> কীগুলি অনন্য হওয়া উচিত নয়।
ব্রুনো বিয়েরি

6
@ ব্রুনোবেয়েরি তালিকা <কেভ্যালিউপায়ার> কীগুলি অনন্য হতে পারে না
নিখিল ভারতাক

4
আমি আপনার 2 বছরের পুরানো মন্তব্যটি সংশোধন করেছি এবং আপনি এটি লক্ষ্য করেছেন। অবাক হওয়ার কারণ নেই কেন এসও একমাত্র বিশ্বস্ত এবং সবচেয়ে জনপ্রিয় প্রশ্নোত্তর প্ল্যাটফর্ম।
নিখিল वर्तক

14

আপনি যখন আইটেমগুলির ক্রম সম্পর্কে যত্নশীল হন তখন তালিকাটিও কার্যকর হবে।



4
হ্যাঁ, তবে সোর্টার্ডডিয়েশনারি মানগুলির ক্রমটি কভার করতে পারে না, কেবল কীগুলি।
কনফিউজডম্যান

7

ফিলিপ নাগানের উত্তর, এসওএপি বা অন্যথায় আপনি আইডিকেয়ার প্রয়োগ করে এমন বস্তুগুলিকে এক্সএমএল সিরিয়ালাইজ করতে পারবেন না।

প্রশ্ন: আমি কেন হ্যাশ টেবিল সিরিয়াল করতে পারি না?

উত্তর: এক্সএমএলসিরাইজার আইডোরিয়াস ইন্টারফেস প্রয়োগের ক্লাসগুলি প্রক্রিয়া করতে পারে না। এটি আংশিক সময়সূচী বাধার কারণে এবং আংশিকভাবে XSD টাইপ সিস্টেমে কোনও হ্যাশটেবলের কোনও অংশ নেই বলে এই কারণে হয়েছিল was একমাত্র সমাধান হ'ল একটি কাস্টম হ্যাশটেবল বাস্তবায়ন যা আইডোরিয়াস ইন্টারফেসটি বাস্তবায়িত করে না।

এখান থেকে


5

সিলভারলাইটের জন্য এসওএপি ওয়েবসার্চিতে আমরা খুঁজে পেয়েছি যে অভিধানগুলি সিরিয়াল করে না। এটি এমন একটি পরিস্থিতি হবে যেখানে আপনি অভিধানের উপর কীভ্যালিউপায়ার তালিকা ব্যবহার করবেন।


3

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>আনতে চলেছি যেখানে প্রসারিত হবে IEnumeratorDictionary<K,V>-> IEnumerable<T>-> থেকে শ্রেণিবিন্যাসের পদচারণা করা খুব অবাক হবে IEnumerable we

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.