मेरे पास दो संग्रह a
और b
हैं। मैं a
या b
में आइटमों के सेट की गणना करना चाहता हूं, लेकिन दोनों में नहीं (एक लॉजिकल अनन्य या)।LINQ और सेट अंतर
IEnumerable<T> Delta<T>(IEnumerable<T> a, IEnumerable<T> b)
{
return a.Except (b).Union (b.Except (a));
}
मुझे आश्चर्य है कि अगर वहाँ दो संग्रह के बीच अंतर का निर्माण करने में अन्य अधिक कुशल या अधिक कॉम्पैक्ट तरीके हैं: LINQ के साथ, मैं इस के साथ आ सकते हैं।
संपादित करें 1: जॉन स्कीट ने पहला समाधान पोस्ट किया जो HashSet
पर निर्भर करके वस्तुओं के क्रम को संरक्षित नहीं करता है। मुझे आश्चर्य है कि क्या अन्य दृष्टिकोण हैं जो आउटपुट में a
और b
के आदेश को सुरक्षित रखेंगे।
HashSet<T> data = new HashSet<T>(a);
data.SymmetricExceptWith(b);
संपादित करें:: -
क्या होगा यदि ए या बी में डुप्लिकेट हों? –
मेरे मामले में, 'ए' और' बी 'में डुप्लीकेट नहीं होते हैं, इसलिए यह मेरे लिए चिंता नहीं है। आपके त्वरित उत्तर के लिए –