2011-02-02 24 views
12

निम्नलिखित की तरह LINQ का उपयोग कर दो सूचियों विलय करने के लिए कैसे:LINQ का उपयोग करके दो सूचियों को कैसे मर्ज करें?

class Person 
{ 
    public int ID { get; set;} 
    public string Name { get; set;} 
    public Person Merge(Person p) 
    { 
     return new Person { ID = this.ID, Name = this.Name + " " + p.Name }; 
    } 
} 

मैं उस व्यक्ति के दो सूची है:

list1: 
1, A 
2, B 

list2: 
2, C 
3, D 

मैं निम्नलिखित

result: 
1, A 
2, B C 
3, D 

किसी भी मदद की तरह परिणाम चाहते हैं !

उत्तर

19

मैं इस जानकारी का प्रतिनिधित्व करने के लिए स्ट्रिंग-कॉन्सटेनेशन का उपयोग करने के खिलाफ दृढ़ता से अनुशंसा करता हूं; यदि आप मर्ज किए गए सूची से मूल डेटा वापस प्राप्त करना चाहते हैं तो आपको अनावश्यक स्ट्रिंग-मैनिपुलेशन करने की आवश्यकता होगी। इसके अतिरिक्त, विलय संस्करण (जैसा कि यह खड़ा है) हानिकारक हो जाएगा यदि आप कभी भी कक्षा में अतिरिक्त गुण जोड़ने का निर्णय लेते हैं।

पसंदीदा रूप से, Merge विधि से छुटकारा पाएं और एक उपयुक्त डेटा-संरचना का उपयोग करें जैसे मल्टीमैप जो प्रत्येक एक या अधिक मानों के लिए कुंजी का संग्रह मैप कर सकता है। के रूप में पूछा वैसे भी

var personsById = list1.Concat(list2) 
         .ToLookup(person => person.ID); 

, सवाल का जवाब देने के लिए, आप दो दृश्यों को श्रेणीबद्ध कर सकते हैं, तो उनके ID और उसके बाद से समूह व्यक्तियों एक एकल में प्रत्येक समूह के कुल: Lookup<TKey, TElement> वर्ग इस उद्देश्य की सेवा कर सकते प्रदान की Merge विधि के साथ व्यक्ति:

var mergedList = list1.Concat(list2) 
         .GroupBy(person => person.ID) 
         .Select(group => group.Aggregate(
             (merged, next) => merged.Merge(next))) 
         .ToList(); 

संपादित: फिर से पढ़ने पर, सिर्फ एक है कि एहसास हुआ दो सूचियां हैं क्योंकि concatenation आवश्यक है।

+0

सलाह के लिए धन्यवाद, लेकिन पोस्ट कोड सिर्फ विचार के लिए एक नमूना है, न कि मेरा असली कोड। – Homam

संबंधित मुद्दे