c# - Check if one IEnumerable contains all elements of another IEnumerable -


प्रत्येक तत्व की एक फ़ील्ड / प्रॉपर्टी की तुलना करते समय एक IEnumerable को अन्य IEnumerable के सभी तत्वों को शामिल करने का सबसे तेज़ तरीका क्या है दोनों संग्रह में?


  सार्वजनिक वर्ग आइटम {सार्वजनिक स्ट्रिंग मान; सार्वजनिक आइटम (स्ट्रिंग मान) {मान = मान; }} // उदाहरण उपयोग वस्तु [] सूची 1 = {नया आइटम ("1"), नया आइटम ("a")}; आइटम [] सूची 2 = {नया आइटम ("ए"), नया आइटम ("बी"), नया आइटम ("सी"), नया आइटम ("1")}; बूल शामिल है (IEnumerable & lt; आइटम & gt; सूची 1, IEnumerable & lt; आइटम & gt ;, list2) {var list1 मूल्य = सूची 1। चयन करें (आइटम = & gt; आइटम। मूल्य); Var list2Values ​​= list2.Select (item = & gt; item.Value); वापसी // list1 मूल्यों में सभी सूची 1 मूल्य हैं? } शामिल है (सूची 1, सूची 2) // सच में शामिल होना चाहिए (सूची 2, सूची 1) / /  

ऐसा करने के लिए कोई" तेज़ तरीका "नहीं है जब तक कि आप किसी राज्य को ट्रैक और बनाए न रखें जो निर्धारित करता है कि एक संग्रह में सभी मान दूसरे में शामिल हैं या नहीं। यदि आपके पास केवल IEnumerable & lt; T & gt; के खिलाफ काम करने के लिए, मैं Intersect

  var allOfList1IsInList2 = list1.Intersect (list2) का उपयोग करेगा। .काउंट () == सूची 1। गणना ();  

इसका निष्पादन बहुत ही उचित होना चाहिए, क्योंकि अंतर () प्रत्येक सूची पर सिर्फ एक बार बताएगा इसके अलावा, गणना () को कॉल करने पर इष्टतम होगा यदि अंतर्निहित प्रकार एक ICollection & lt; T & gt; बजाय सिर्फ एक IEnumerable & lt; T & gt;


Comments