ऐसा लगता है कि आप चाहते हैं सब कुछ में array2
को छोड़कर क्या array1
में बताया गया है:,
var onlyInArray2 = array2.Except(array1);
बेशक
अगर आप भी को पता है कि केवल array1
में था आप इस्तेमाल कर सकते हैं चाहता था:
var onlyInArray1 = array1.Except(array2);
(यह सभी को .NET 3.5 या उच्चतर, या LINQBridge जैसे ऑब्जेक्ट्स कार्यान्वयन के लिए वैकल्पिक LINQ की आवश्यकता है।)
मुझे लगता है कि मतभेदों की गणना करते समय ऑर्डर महत्वपूर्ण नहीं है - Except
एक सेट-आधारित ऑपरेटर है, इसलिए मान लें कि आप सेट के रूप में संग्रह के संबंध में हैं।
Except
सिर्फ रिटर्न
कृपया ध्यान दें कि IEnumerable<T>
- अगर आप सरणियों के रूप में परिणाम चाहते हैं, आप ToArray
कॉल करने के लिए की आवश्यकता होगी:
var onlyInArray2 = array2.Except(array1).ToArray();
var onlyInArray1 = array1.Except(array2).ToArray();
आप सममित अंतर चाहते हैं, यानी आप केवल परवाह के बारे में जो मूल्य हैं एक सारिणी, बल्कि जो सरणी की तुलना में वे से आया है, आप इस्तेमाल कर सकते हैं:
var onlyInOneArray = array1.Union(array2).Except(array1.Intersect(array2));
या आप HashSet
सीधे इस्तेमाल कर सकते हैं:
var set = new HashSet<string>(array1);
// This modifies the set...
set.SymmetricExceptWith(array2);
इन सभी में, परिणामस्वरूप आदेश अनिर्धारित है, हालांकि अभ्यास में Except
पहले तर्क के मूल क्रम को संरक्षित रखेगा। हालांकि यह सख्ती से एक कार्यान्वयन विस्तार बोल रहा है, मुझे लगता है कि यह बदलने की संभावना बहुत कम है।
LINQ में दूसरे सेट के आधार पर ऑपरेटरों की तरह, Except
केवल एक बार किसी भी तत्व को वापस आ जाएगी - इसलिए यदि COM8
array2
में दो बार दिखाई दिया, तो वह केवल परिणाम में एक बार दिखाई देता है।
यह वास्तव में मदद मिलेगी सबसे छोटा रास्ता लगता है: अगर 'COM8' एक सीरियल पोर्ट पहचानकर्ता को संदर्भित करता है, तो आप एक केस-संवेदी तुलना प्रदर्शन करना चाहते हैं यदि आप तुलना करने के बारे में अधिक विशिष्टता देंगे जो आप बनाना चाहते हैं। उदाहरण के लिए, क्या आप आदेश को महत्वपूर्ण मानते हैं? मामला? इसके बारे में क्या है यदि कोई तत्व 'com1' में होता है लेकिन 'com2' नहीं होता है? –