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


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.