লিনকিউ - তালিকা হিসাবে মান হিসাবে তালিকাতে রূপান্তর করুন


101

আমার আছে একটি

List<MyObject> 

যে আমি ডাটাবেস থেকে পুনরুদ্ধার। যাইহোক, আমি চাই এটি গোষ্ঠীকরণের উদ্দেশ্যে মাইওবজেক্টের কোনও সম্পত্তি দ্বারা চাবিযুক্ত। আমার তালিকাটি কাস্ট করার জন্য লিনকুইয়ের সাথে সর্বোত্তম উপায় কী:

Dictionary<long, List<MyObject>>

আমার নিম্নলিখিতগুলি রয়েছে:

myObjectList.ToDictionary(x => x.KeyedProperty)

তবে এটি ফিরে আসে:

Dictionary<long, MyObject>

আপনি চাইছেন অভিধানটি কোন্ মাইওবজেক্টের একটি যথাযথ প্রতিবিম্বিত? - আপনার
— সেগুলির

উত্তর:


194

মত শোনাচ্ছে আপনাকে গোষ্ঠী করতে চান MyObjectদ্বারা দৃষ্টান্ত KeyedPropertyএবং যে একটি মধ্যে গোষ্ঠীবদ্ধ করা Dictionary<long,List<MyObject>>। যদি তাই হয় তবে নিম্নলিখিত চেষ্টা করুন

List<MyObject> list = ...;
var map = list
  .GroupBy(x => x.KeyedProperty)
  .ToDictionary(x => x.Key, x => x.ToList());

16

আপনার ক্লাসে ToLookupএক্সটেনশন পদ্ধতিটি ব্যবহার করা উচিত :Enumerable

List<MyObject> list = ...;

ILookup<long, MyObject> lookup = list.ToLookup(o => o.KeyedProperty);

যদি আপনি এটি অভিধানে রাখতে চান তবে আপনি ToDictionaryএক্সটেনশন পদ্ধতিটি ব্যবহার করতে পারেন :

IDictionary<long, IEnumerable<MyObject>> dictionary = lookup.ToDictionary(
    l => l.Key);

এই এবং গৃহীত উত্তরের মধ্যে পার্থক্য কী? ILookupগৃহীত উত্তর না থাকলেও কি রেফারেন্সগুলি সংরক্ষণ করে?
— প্যাটপিটার

@ পেটপিটার ধারণাটি হল যে আপনি যখন কী এবং আইটেমগুলির মধ্যে একের মধ্যে একাধিক সম্পর্ক স্থাপন করেন, তখন এটি একটির Lookup<TKey, TValue>চেয়ে আরও ভাল কাঠামো হতে পারে Dictionary<TKey, TValue>।
— ক্যাস্পারওন

4
@ পেটপিটার আমি বলব যে ILookup হ'ল ব্যবহারের জন্য আরও ভাল কাঠামো (এটি ডিক্টনোরির মানচিত্রে মাল্টিম্যাপের মতো, যদি আপনি সি ++ সংগ্রহের অ্যালগরিদমগুলি জানেন তবে) এটির একটি বড় কারণ মনে রাখা উচিত - তৈরি হওয়া চেহারাটি অপরিবর্তনীয়। আপনি পরে এন্ট্রি যোগ বা সরাতে পারবেন না।
— gbjbaanb

অন্য বিবেচনাটি হ'ল যদিও ILookupবেশিরভাগ ক্ষেত্রে আদর্শ কোড কাঠামো হলেও এটি প্রায়শই সিরিয়ালকরণের জন্য ভালভাবে পরিচালিত হয় না।
— জেফ বি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.