যখন ব্যতিক্রম কোনও বিকল্প নয়, তখন লুকআপের জন্য যান
আপনি যদি কোনও কাঠামোকে দক্ষ হিসাবে দক্ষ করার চেষ্টা করছেন Dictionary
তবে আপনি জানেন না যে ইনপুটটিতে কোনও সদৃশ কী নেই, Lookup
এটি নিরাপদ।
অন্য উত্তরে যেমন উল্লেখ করা হয়েছে, এটি নাল কীগুলি সমর্থন করে এবং স্বেচ্ছাসেবী তথ্যগুলির সাথে অনুসন্ধান করা হলে সর্বদা একটি বৈধ ফলাফল প্রদান করে, তাই এটি অজানা ইনপুটটির কাছে আরও বেশি স্থিতিস্থাপক হিসাবে উপস্থিত হয় (ব্যতিক্রম বাড়াতে অভিধানের চেয়ে কম প্রবণ)।
আপনি যদি এটি System.Linq.Enumerable.ToDictionary
ফাংশনটির সাথে তুলনা করেন তবে এটি বিশেষত সত্য :
// won't throw
new[] { 1, 1 }.ToLookup(x => x);
// System.ArgumentException: An item with the same key has already been added.
new[] { 1, 1 }.ToDictionary(x => x);
বিকল্পটি হ'ল আপনার নিজের ডুপ্লিকেট কী পরিচালনা কোডটি একটি foreach
লুপের ভিতরে লিখতে হবে ।
পারফরম্যান্স বিবেচনা, অভিধান: একটি স্পষ্ট বিজয়ী
আপনার যদি কোনও তালিকার প্রয়োজন না থাকে এবং আপনি বিপুল সংখ্যক আইটেম পরিচালনা করতে চলেছেন, Dictionary
(বা এমনকি আপনার নিজস্ব নিজস্ব পছন্দসই কাঠামো) আরও দক্ষ হবে:
Stopwatch stopwatch = new Stopwatch();
var list = new List<string>();
for (int i = 0; i < 5000000; ++i)
{
list.Add(i.ToString());
}
stopwatch.Start();
var lookup = list.ToLookup(x => x);
stopwatch.Stop();
Console.WriteLine("Creation: " + stopwatch.Elapsed);
// ... Same but for ToDictionary
var lookup = list.ToDictionary(x => x);
// ...
হিসাবে Lookup
, প্রতিটি কী-এর জন্য আইটেম একটি তালিকা বজায় রাখার জন্য রয়েছে এটি অভিধানে তুলনায় ধীর (প্রায় 3x ধীর আইটেম বিপুল সংখ্যার জন্য) হল
অনুসন্ধানের গতি: সৃষ্টি: 00: 00: 01.5760444
অভিধানের গতি: সৃষ্টি: 00: 00: 00.4418833