2012-03-01 8 views
28

में नहीं किसी भी तत्व शामिल हैं मैं दो सूचियों है:पता करें कि लिस्टा listB

List<int> listA  
List<int> listB 

LINQ का उपयोग कर यदि listA में एक तत्व wchich deosn't listB में मौजूद है मौजूद है कैसे जाँच करने के लिए? मैं foreach पाश का उपयोग कर सकते हैं, लेकिन अगर मैं इस LINQ

उत्तर

72

listA.Except(listB) आपको लगता है कि listB में नहीं हैं लिस्टा में आइटम के सभी दे देंगे का उपयोग कर सकते मैं सोच रहा हूँ

+1

हाँ, यह ऐसा करेंगे। लेकिन चूंकि यह एक सेट आधारित ऑपरेशन है, यह याद रखने योग्य है कि परिणामस्वरूप सूची सूची सूची या सूचीबी में मौजूद डुप्लिकेट को भी हटा देगी। – Holf

4

आप इसे एक में कर सकते हैं एकल लाइन

var res = listA.Where(n => !listB.Contains(n)); 

यह यह करने के लिए सबसे तेज़ तरीका नहीं है: मामले listB में अपेक्षाकृत लंबे, इस तेजी से किया जाना चाहिए:

var setB = new HashSet(listB); 
var res = listA.Where(n => !setB.Contains(n)); 
11
listA.Any(_ => listB.Contains(_)) 

:)

+1

यह सबसे अच्छा anwser है, क्योंकि @ cadrell0 और SLaks द्वारा प्रदान किए गए समाधान केवल यह जांचेंगे कि ए में बी के सभी तत्व शामिल हैं, लेकिन यदि बी में कोई और तत्व नहीं है जो ए से मेल नहीं खाता है तो यह समाधान नीचे उदाहरण के लिए मान्य है। ए: [0,1,2,3]; बी: [0,1,2,3,4] 'listA.Except (listB) .एनी() == झूठी' ' listA.Any (_ => listB.Contains (_)) == true' –

+0

@TomaszJuszczak सच है, लेकिन सवाल विशेष रूप से केवल तभी पूछा जाता है जब ए में बी में कुछ भी शामिल न हो - यानी ** ** ** को झूठ का मूल्यांकन करना चाहिए यदि बी में कोई प्रदान नहीं किया गया है ए में बी में कुछ शामिल नहीं है तो यह जवाब है गलत। (हाँ, जब मैंने पहली बार पढ़ा था तो मैंने इस सवाल को गलत समझा।) –

2

सूची है विधि है कि वापसी bool शामिल हैं। हम क्वेरी में उस विधि का उपयोग कर सकते हैं।

List<int> listA = new List<int>(); 
List<int> listB = new List<int>(); 
listA.AddRange(new int[] { 1,2,3,4,5 }); 
listB.AddRange(new int[] { 3,5,6,7,8 }); 

var v = from x in listA 
     where !listB.Contains(x) 
     select x; 

foreach (int i in v) 
    Console.WriteLine(i); 
0

कोड का यह टुकड़ा दो सूचियों की तुलना करता है जिसमें संस्कृति कोड जैसे 'एन-जीबी' के लिए एक फ़ील्ड शामिल है। यह सूची में मौजूद मौजूदा अनुवादों को छोड़ देगा। (हम लेख के लिए नहीं-अनुवादित भाषाओं के लिए एक ड्रॉपडाउन सूची की जरूरत)

var compared = supportedLanguages.Where(sl => !existingTranslations.Any(fmt => fmt.CultureCode == sl.Culture)).ToList();

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