কম্পিউটার টিউটোরিয়াল

C#-তে দুটি StringBuilder অবজেক্ট সমান কিনা যাচাই করা

StringBuilder ক্লাসের Equals(object obj) মেথড ব্যবহার করে দুটি StringBuilder অবজেক্ট সমান কিনা তা যাচাই করা যায়। গুরুত্বপূর্ণ: StringBuilder.Equals ডিফল্টভাবে রেফারেন্স সমতা চেক করে (Object.Equals-এর মতো), কন্টেন্ট সমতা নয়।

উদাহরণ ১: রেফারেন্স সমতা (একই অবজেক্ট)

using System;
using System.Text;

public class Demo {
    public static void Main(string[] args) {
        StringBuilder strBuilder1 = new StringBuilder("টিম");
        StringBuilder strBuilder2 = new StringBuilder("টম");
        StringBuilder strBuilder3 = new StringBuilder();
        
        // strBuilder2 = strBuilder3 (রেফারেন্স অ্যাসাইনমেন্ট)
        strBuilder2 = strBuilder3;

        Console.WriteLine("StringBuilder3 == StringBuilder2? = " + strBuilder3.Equals(strBuilder2));
    }
}

আউটপুট

StringBuilder3 == StringBuilder2? = True

উদাহরণ ২: আলাদা অবজেক্ট কিন্তু একই কন্টেন্ট

using System;
using System.Text;

public class Demo {
    public static void Main(string[] args) {
        StringBuilder strBuilder1 = new StringBuilder("জ্যাকব");
        StringBuilder strBuilder2 = new StringBuilder("জ্যাকব");

        Console.WriteLine("StringBuilder1 কন্টেন্ট: " + strBuilder1.ToString());
        Console.WriteLine("StringBuilder2 কন্টেন্ট: " + strBuilder2.ToString());
        Console.WriteLine("StringBuilder1 == StringBuilder2? = " + strBuilder2.Equals(strBuilder1));
    }
}

আউটপুট

StringBuilder1 কন্টেন্ট: জ্যাকব
StringBuilder2 কন্টেন্ট: জ্যাকব
StringBuilder1 == StringBuilder2? = True

⚠️ গুরুত্বপূর্ণ সতর্কতা: StringBuilder.Equals আচরণ

দ্বিতীয় উদাহরণে আউটপুট True দেখাচ্ছে, কিন্তু এটি রেফারেন্স সমতার কারণে নয়। আসলে StringBuilder ক্লাস Equals মেথড ওভাররাইড করে না, তাই এটি Object.Equals ব্যবহার করে যা রেফারেন্স সমতা চেক করে। উদাহরণ ২-এ আউটপুট True আসা সম্ভবত একটি বাগ বা নির্দিষ্ট রানটাইম আচরণ। সাধারণত এটি False রিটার্ন করত।

সঠিক পদ্ধতি: StringBuilder কন্টেন্ট তুলনা

using System;
using System.Text;

public class Demo {
    public static void Main() {
        StringBuilder sb1 = new StringBuilder("হ্যালো");
        StringBuilder sb2 = new StringBuilder("হ্যালো");
        StringBuilder sb3 = sb1;  // সেম রেফারেন্স

        // ভুল পদ্ধতি (রেফারেন্স চেক)
        Console.WriteLine("sb1.Equals(sb2): " + sb1.Equals(sb2));      // সাধারণত False
        Console.WriteLine("sb1 == sb2: " + (sb1 == sb2));              // False
        Console.WriteLine("sb1.Equals(sb3): " + sb1.Equals(sb3));      // True (সেম রেফারেন্স)

        // সঠিক পদ্ধতি ১: ToString() তুলনা
        Console.WriteLine("sb1.ToString() == sb2.ToString(): " + (sb1.ToString() == sb2.ToString()));  // True

        // সঠিক পদ্ধতি ২: String.Equals (অর্ডিনাল কম্পারিজন)
        Console.WriteLine("string.Equals(sb1.ToString(), sb2.ToString()): " + string.Equals(sb1.ToString(), sb2.ToString()));  // True

        // সঠিক পদ্ধতি ৩: SequenceEqual (LINQ, char-by-char)
        Console.WriteLine("sb1.ToString().SequenceEqual(sb2.ToString()): " + sb1.ToString().SequenceEqual(sb2.ToString()));  // True
    }
}

StringBuilder তুলনার সেরা অনুশীলন

পদ্ধতিকোডপারফরম্যান্সনোট
ToString() + ==sb1.ToString() == sb2.ToString()O(n) অ্যালোকেশন + O(n) কম্পারিজনসহজ, পঠনযোগ্য
string.Equalsstring.Equals(sb1.ToString(), sb2.ToString())O(n) অ্যালোকেশন + O(n) কম্পারিজননাল-সেফ, কালচার-সেফ
SequenceEqualsb1.ToString().SequenceEqual(sb2.ToString())O(n) অ্যালোকেশন + O(n) কম্পারিজনLINQ, ইয়ারলি এক্সিট
কাস্টম মেথড (নো অ্যালোকেশন)Custom comparer using sb1[i] == sb2[i]O(n) কোনো অ্যালোকেশন নেইসর্বোত্তম পারফরম্যান্স

কাস্টম স্ট্রিংবিল্ডার কম্পারার (নো অ্যালোকেশন)

public static bool StringBuilderEquals(StringBuilder sb1, StringBuilder sb2) {
    if (ReferenceEquals(sb1, sb2)) return true;
    if (sb1 is null || sb2 is null) return false;
    if (sb1.Length != sb2.Length) return false;
    
    for (int i = 0; i < sb1.Length; i++) {
        if (sb1[i] != sb2[i]) return false;
    }
    return true;
}

নোট: StringBuilder মূলত মিউটেবল স্ট্রিং বিল্ডিংয়ের জন্য ডিজাইন করা। তুলনা করার আগে ToString() কল করুন অথবা উপরের কাস্টম মেথড ব্যবহার করুন।

  1. পাইথন প্যান্ডাস - দুটি Index অবজেক্ট সমান কিনা তা নির্ধারণ করুন

  2. পাইথন: স্ট্রিং স্প্লিটের অংশগুলো সমান কিনা যাচাই করা

  3. পাইথন প্যান্ডাস: দুটি ডেটাফ্রেম অবজেক্ট সমান কিনা যাচাই করা

  4. পাইথন প্রোগ্রাম: দুটি নম্বর amical (Amicable Numbers) কিনা চেক করা