2017-01-17 5 views
5

मेरे पास "लोग" की एन सूचियां हैं। लोगों के पास 2 गुण हैं: Id और Name। मैं उन सभी लोगों को ढूंढना चाहता हूं जो सभी एन सूचियों में निहित हैं। मैं केवल आईडी पर मिलना चाहता हूं।एन सूचियों में सामान्य वस्तुओं को ढूंढें

List<People> result = new List<People>(); 

//I think I only need to find items in the first list that are in the others 
foreach (People person in peoplesList.First()) { 

    //then this is the start of iterating through the other full lists 
    foreach (List<People> list in peoplesList.Skip(1)) { 

     //Do I even need this? 

    } 
} 

मैं मध्य भाग के आसपास मेरे सिर लपेटो करने की कोशिश कर अटक कर रहा हूँ:

नीचे मेरी शुरुआती बिंदु है। मैं केवल उन लोगों को चाहता हूं जो प्रत्येक सूची में peoplesList.Skip(1) से हैं।

उत्तर

4

गणितीय बोलने; आप अपनी सभी सूचियों के बीच सेट चौराहे की तलाश में हैं। सौभाग्य से, LINQ में Instersect विधि है, इसलिए आप अपने सेट को पुन: सक्रिय कर सकते हैं।

List<List<People>> lists; //Initialize with your data 
IEnumerable<People> commonPeople = lists.First(); 
foreach (List<People> list in lists.Skip(1)) 
{ 
    commonPeople = commonPeople.Intersect(list); 
} 
//commonPeople is now an IEnumerable containing the intersection of all lists 

काम कर आप IEqualityComparer की People

IEqualityComparer<People> comparer = new PeopleComparer(); 
... 
commonPeople = commonPeople.Intersect(list, comparer); 

वास्तविक कार्यान्वयन के बाद से अपनी सुंदर रफ़ू सरल बाहर छोड़ दिया के लिए IEqualityComparer को लागू करने की आवश्यकता होगी "आईडी" चयनकर्ता प्राप्त करने के लिए।

+0

आह इसलिए हम मौजूदा सूची w/प्रत्येक चौराहे में बदलाव कर रहे हैं। अच्छा! धन्यवाद, मैं इसे एक शॉट –

+1

@DustinBreakey एक नई 'सूची' नहीं दे सकता (हालांकि आप * यह * कर सकते हैं, बस अधिक अक्षम) एक नया 'IENumerable' ताकि आप केवल 'सामान्य लोगों' को फिर से पूर्ण क्वेरी निष्पादित कर सकें समाप्त। – BradleyDotNET

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