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

C#-তে দুটি Tuple অবজেক্ট সমান কিনা যাচাই করা Equals() মেথড দিয়ে

Tuple ক্লাসের Equals(object obj) মেথড ব্যবহার করে দুটি Tuple অবজেক্ট সমান কিনা তা যাচাই করা যায়। দুটি Tuple সমান হলে এবং তখনই সমান হয় যখন:

  • উভয়ের একই টাইপ (সেইম জেনেরিক আর্গুমেন্ট) হয়
  • উপাদান সংখ্যা সমান হয়
  • প্রতিটি সংশ্লিষ্ট উপাদান সমান হয় (Item1 == Item1, Item2 == Item2, ...)

উদাহরণ ১: সমান Tuple অবজেক্ট

using System;

public class Demo {
    public static void Main(string[] args) {
        var tuple1 = Tuple.Create(150, 400, 500, 700, 100, 1200, 1500);
        var tuple2 = Tuple.Create(150, 400, 500, 700, 100, 1200, 1500);

        Console.WriteLine("Tuple1 এবং Tuple2 সমান কিনা? = " + tuple1.Equals(tuple2));
    }
}

আউটপুট

Tuple1 এবং Tuple2 সমান কিনা? = True

উদাহরণ ২: অসমান Tuple অবজেক্ট (নেস্টেড Tuple ভিন্ন)

using System;

public class Demo {
    public static void Main(string[] args) {
        // ৮-উপাদানের Tuple (সান্তম উপাদান nested Tuple)
        var tuple1 = Tuple.Create(150, 400, 500, 700, 100, 1200, 1500, Tuple.Create(50, 100));
        var tuple2 = Tuple.Create(150, 400, 500, 700, 100, 1200, 1500, Tuple.Create(100, 200));

        Console.WriteLine("Tuple1 এবং Tuple2 সমান কিনা? = " + tuple1.Equals(tuple2));
    }
}

আউটপুট

Tuple1 এবং Tuple2 সমান কিনা? = False

Tuple.Equals() - গুরুত্বপূর্ণ বিষয়সমূহ

  • ভ্যালু বেইসড সমতা: Tuple রেফারেন্স টাইপ হলেও Equals ভ্যালু বেইসড সমতা চেক করে (struct-like behavior)।
  • নেস্টেড Tuple: ৮+ উপাদানের Tuple-এ সান্তম উপাদান Rest প্রোপার্টিতে থাকে, যা একটি Tuple। নেস্টেড Tuple-র সমতাও রিকার্সিভলি চেক হয়।
  • null হ্যান্ডলিং: tuple.Equals(null) → false রিটার্ন করে (নাল রেফারেন্স এক্সেপশন নয়)।
  • টাইপ মিল: Tuple<int, int> এবং Tuple<long, long> সমান নয় (টাইপ ভিন্ন)।

Tuple সমতা চেকের অন্যান্য পদ্ধতি

// ১. == অপারেটর (রেফারেন্স সমতা চেক করে - Tuple-এ ওভাররাইড নেই)
Console.WriteLine(tuple1 == tuple2);  // False (আলাদা অবজেক্ট)

// ২. Object.Equals (স্ট্যাটিক, null-safe)
Console.WriteLine(object.Equals(tuple1, tuple2));  // True (ভ্যালু বেইসড)

// ৩. ValueTuple (C# 7.0+) - == অপারেটর ওভাররাইড করা আছে
var vt1 = (1, 2, 3);
var vt2 = (1, 2, 3);
Console.WriteLine(vt1 == vt2);  // True (ভ্যালু বেইসড)
Console.WriteLine(vt1.Equals(vt2));  // True

Tuple vs ValueTuple - সমতা চেক তুলনা

বৈশিষ্ট্যTuple (Reference Type)ValueTuple (Value Type)
Equals()ভ্যালু বেইসড (ওভাররাইড)ভ্যালু বেইসড (ওভাররাইড)
== অপারেটররেফারেন্স বেইসডভ্যালু বেইসড (ওভাররাইড)
GetHashCode()ভ্যালু বেইসডভ্যালু বেইসড
নেস্টেড সাপোর্টRest প্রোপার্টিনেস্টেড টাইপ সরাসরি

সুপারিশ: নতুন কোডে ValueTuple (C# 7.0+) ব্যবহার করুন - এটি হালকা, ফাস্ট, এবং নামযুক্ত উপাদান সাপোর্ট করে।

  1. C#-এ দুটি ম্যাট্রিক্স ইডেন্টিক্যাল কিনা চেক করা

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

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

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