লিনকিউ সহ একটি অভিধান <টি 1, টি 2> নির্বাচন করুন


171

আমি IEnumerable<T>লিনকিউ দিয়ে একটি ফেরত দিতে "নির্বাচন করুন" কীওয়ার্ড এবং এক্সটেনশন পদ্ধতিটি ব্যবহার করেছি , তবে আমার জেনেরিক ফিরিয়ে দেওয়ার দরকার আছে Dictionary<T1, T2>এবং এটি বের করতে পারি না। নীচের অনুরূপ আকারে ব্যবহৃত কিছু থেকে আমি উদাহরণটি শিখেছি:

IEnumerable<T> coll = from x in y 
    select new SomeClass{ prop1 = value1, prop2 = value2 };

এক্সটেনশন পদ্ধতিতেও আমি একই কাজ করেছি। আমি ধরে নিয়েছি যেহেতু একটিতে থাকা আইটেমগুলিকে Dictionary<T1, T2>পুনরাবৃত্তি করা যেতে পারে KeyValuePair<T1, T2>যে উপরের উদাহরণে আমি "" সামসক্লাস "কে" "" দিয়ে প্রতিস্থাপন করতে পারি new KeyValuePair<T1, T2> { ..., তবে এটি কার্যকর হয়নি (কী এবং মানটি কেবল পাঠ্য হিসাবে চিহ্নিত হয়েছিল, তাই আমি এই কোডটি সংকলন করতে পারিনি) )।

এটি কি সম্ভব, নাকি একাধিক পদক্ষেপে আমার এটি করা দরকার?

ধন্যবাদ।

উত্তর:


284

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

class SomeObject
{
    public int ID { get; set; }
    public string Name { get; set; }
}

SomeObject[] objects = new SomeObject[]
{
    new SomeObject { ID = 1, Name = "Hello" },
    new SomeObject { ID = 2, Name = "World" }
};

Dictionary<int, string> objectDictionary = objects.ToDictionary(o => o.ID, o => o.Name);

তারপরে objectDictionary[1]"হ্যালো" মান থাকবে


44
var dictionary = (from x in y 
                  select new SomeClass
                  {
                      prop1 = value1,
                      prop2 = value2
                  }
                  ).ToDictionary(item => item.prop1);

এটি ধরেই নেওয়া SomeClass.prop1হচ্ছে Keyএটি অভিধানের জন্য পছন্দসই ।


27
.ToDictionary(item => item.prop1, item => item.prop2);স্পষ্টতা মান সেট করতে।
ফিনআউটলুক

42

এর একটি সংগ্রহ KeyValuePairআরও সুস্পষ্ট এবং খুব ভাল সম্পাদন করে।

Dictionary<int, string> dictionary = objects
    .Select(x=> new KeyValuePair<int, string>(x.Id, x.Name))
    .ToDictionary(x=>x.Key, x=>x.Value);

এটি কি মুছে ফেলা সম্ভব? টুডেটারিয়েশন (x => x.Key, x => x.Value); এবং নতুন অভিধানের সাথে নতুন কীভালিউয়ারটি প্রতিস্থাপন করবেন?
আমির হাজিহা

@ আমিরন-পরিবার আপনি ভুল করছেন। (X => x ...) পদ্ধতি নির্বাচন করুন বস্তু সংগ্রহের প্রতিটি উপাদানগুলির জন্য একটি অভিক্ষেপ সঞ্চালন করুন । সুতরাং নতুন কীভ্যালিউ পেয়ারকে নতুন ডিসিশনারি দিয়ে প্রতিস্থাপন করা অভিধানের অভিধান তৈরি করবে। আমি মনে করি না আপনি এটাকে লক্ষ্য করছেন।
এন্টোইন মেল্টেজহিম

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