c# - How to get distinct instance from a list by Lambda or LINQ -
मेरे पास एक ऐसा वर्ग है:
वर्ग MyClass & lt; T & gt; {सार्वजनिक स्ट्रिंग value1 {get; सेट; } सार्वजनिक टी objT {get; सेट; }}
और इस वर्ग की एक सूची। विशिष्ट value1 द्वारा MyClass की एक सूची प्राप्त करने के लिए मैं 3.5। लैम्ब्डा या लिनक का इस्तेमाल करना चाहता हूं I मुझे लगता है कि इस तरह से एक सूची को कैश करने के लिए .net 2.0 के रास्ते से यह संभव और बहुत सरल है:
सूची & lt; MyClass & lt; T & gt; & gt; सूची; ... सूची & lt; MyClass & lt; T & gt; & gt; ListDistinct = नई सूची & lt; MyClass & lt; T & gt; & gt; (); Foreach (सूची में MyClass & lt; T & gt; उदाहरण) {// कुछ सूची को चेक करने के लिए कुछ कोड ओस्ट इंजेक्शन के साथ obj शामिल है। Value1 // फिर listDistinct.Add (उदाहरण); }
यह करने के लिए लैम्ब्डा या LINQ तरीका क्या है?
विशिष्ट
का उपयोग करने के बजाय, आप GroupBy
का उपयोग कर सकते हैं। यह इस तरह से आता है: var listDistinct = list.GroupBy (i = & gt; i.value1, (कुंजी, समूह) = & gt; समूह.पहले ()) .ToArray ();
ध्यान दें कि मैंने दो कार्यों को GroupBy ()
से पारित किया है। पहला एक महत्वपूर्ण चयनकर्ता है दूसरा प्रत्येक समूह से केवल एक आइटम मिलता है। आपके प्रश्न से, मैंने मान लिया है कि पहले ()
सही था आप एक अलग एक लिख सकते हैं, यदि आप चाहते हैं
मैं निम्नलिखित इनपुट के साथ एक परीक्षण चलाया:
var list = new [ ] {नई 1 मान 1 = "एबीसी", objT = 0}, नया {value1 = "ABC", objT = 1}, नया {value1 = "123", objT = 2}, नया {value1 = "123", objT नया {value1 = "bar", objT = 6}, नया {value1 = "bar" , ObjT = 7}, नया {value1 = "UGH", objT = 8},};
परिणाम था:
// {value1 = ABC, objT = 0} // {value1 = 123, objT = 2} // { Value1 = FOO, objT = 4} // {value1 = bar, objT = 5} // {value1 = UGH, objT = 8}
मैंने इसे प्रदर्शन के लिए परीक्षण नहीं किया है मेरा मानना है कि यह समाधान संभवतः एक से थोड़ा धीमा है जो कि अलग
का उपयोग करता है इस नुकसान के बावजूद, दो महान फायदे हैं: सादगी और लचीलेपन। आमतौर पर, अनुकूलन पर सादगी के पक्ष में बेहतर होगा, लेकिन यह वास्तव में उस समस्या पर निर्भर करता है जिसे आप हल करने की कोशिश कर रहे हैं।
Comments
Post a Comment