मैं ऐसा करने की कोशिश कर रहा हूं जो मुझे लगता है कि "डी-इंटरेक्ट" है (मुझे यकीन नहीं है कि उचित नाम क्या है, लेकिन एपिकगेम्स के टिम स्वीनी ने इसे कहा पुराने UnrealEd में)सूची करने के लिए तेज़ तरीका <T>Contains()
// foo and bar have some identical elements (given a case-insensitive match)
List‹string› foo = GetFoo();
List‹string› bar = GetBar();
// remove non matches
foo = foo.Where(x => bar.Contains(x, StringComparer.InvariantCultureIgnoreCase)).ToList();
bar = bar.Where(x => foo.Contains(x, StringComparer.InvariantCultureIgnoreCase)).ToList();
फिर बाद में, मैं एक और चीज करता हूं जहां मैं मूल से परिणाम घटाता हूं, यह देखने के लिए कि मैंने कौन से तत्व हटा दिए हैं। यह एक्स्सेप्ट() का उपयोग कर सुपर-फास्ट है, इसलिए वहां कोई परेशानी नहीं है।
ऐसा करने का एक तेज़ तरीका होना चाहिए, क्योंकि यह किसी भी सूची में ~ 30,000 तत्वों (स्ट्रिंग के) के साथ बहुत खराब प्रदर्शन कर रहा है। अधिमानतः, इस कदम को करने का एक तरीका और बाद में एक में गिरने से एक अच्छा हो जाएगा। मैंने बजाय .xists() का उपयोग करने की कोशिश की।(), लेकिन यह थोड़ा धीमा है। मुझे थोड़ा मोटा लगता है, लेकिन मुझे लगता है कि यह कुछ संयोजन के साथ संभव होना चाहिए() और .Intersect() और/या। यूनियन()।
आप इसे दो बार क्यों कर रहे हैं? क्या पहले आपको तुलना में सभी मैच नहीं मिलेंगे? जब तक मैं इसे गलत समझता हूं। – gcores
मुझे इस मामले को संरक्षित करने की आवश्यकता है, जो दो सूचियों के बीच (और चाहिए) भिन्न हो सकता है। असल में, यह एक स्वचालित निर्देशिका तुलना प्रोग्राम के लिए है जो पथ और फ़ाइल नाम केस सिंक कर सकता है, और दोनों तरफ गैर मिलान प्रविष्टियों को अनदेखा कर सकता है। –