Skip to content

पोस्ट

कलेक्शन कम्पेयरर, दो कलेक्शन्स के बीच अंतर खोजना

22 जुलाई 2019 • 2 मिनट पढ़ना

कलेक्शन कम्पेयरर, दो कलेक्शन्स के बीच अंतर खोजना

क्या आपको कभी दो कलेक्शन्स की तुलना करनी पड़ी है और इस आधार पर कुछ लॉजिक execute करना पड़ा है कि आइटम source कलेक्शन में है, comparing कलेक्शन में है या दोनों में है? हाँ, मुझे भी, मुझे UI और database से डेटा merge करना था। मुझे कोई अच्छा समाधान नहीं मिला, इसलिए, मैंने एक कलेक्शन कम्पेयरर लिखा।

यह कैसे काम करता है इसे समझाने के लिए आइए एक उदाहरण देखते हैं।

source डेटा में हमारे पास 1, 3, 4, 6 values हैं, और
comparing कलेक्शन में हमारे पास 1, 2, 3, 4, 5 values हैं।

Source डेटा में comparing कलेक्शन की तुलना में 2 और 5 गायब हैं, और comparing कलेक्शन में source कलेक्शन की तुलना में 6 गायब है।

आइए इस merge को समझते हैं:

  1. दोनों में (update)
  2. केवल comparing कलेक्शन में (source में add करें)
  3. दोनों में (update)
  4. दोनों में (update)
  5. केवल comparing कलेक्शन में (source में add करें)
  6. केवल source कलेक्शन में (source से remove करें)

यहाँ कोड कैसा दिखता है:

var source = new []{1, 3, 4, 6};
var collection = new[] {1, 2, 3, 4, 5};

source.CompareTo(collection, (s, d) => s == d)
    .OnlyInSourceCollection(s=> {/* do something */})
    .OnlyInComparingCollection(s=>{/* do something */})
    .InBoth(s=> {/*do something*/})
    .Process();

LINQ का उपयोग क्यों नहीं करें?

आप LINQ का उपयोग कर सकते हैं, हालांकि, LINQ कलेक्शन्स को कम से कम 3 बार iterate करेगा जिसमें डेटा पर operating (adding, updating, और deleting) शामिल नहीं है। CollectionComparer का उपयोग करके, डेटा को केवल दो बार iterate किया जाता है।

अंतर खोजने के तेज़ तरीके हैं जैसे कि binary search, लेकिन binary search केवल integers के साथ काम करता है। कलेक्शन कम्पेयरर किसी भी प्रकार की comparison को support करता है। Comparison इस कोड के साथ define की जाती है: (s, d) => s == d

Source कोड GitHub पर मिल सकता है।

लेखक: चक कॉनवे सॉफ्टवेयर इंजीनियरिंग और जेनेरेटिव AI में विशेषज्ञता रखते हैं। उनसे सोशल मीडिया पर जुड़ें: X (@chuckconway) या उन्हें YouTube पर देखें।

↑ शीर्ष पर वापस

आपको यह भी पसंद आ सकता है