Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

ตรวจสอบว่า Tuple สองออบเจ็กต์เท่ากันใน C#

เมธอด Equals(object) ของ Tuple เปรียบเทียบค่าขององค์ประกอบทุกตำแหน่ง คืน true ก็ต่อเมื่อ ทุกองค์ประกอบเท่ากันและลำดับเหมือนกัน

ตัวอย่างที่ 1: Tuple 7 องค์ประกอบ เท่ากันทุกตัว

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

ตัวอย่างที่ 2: Tuple 8 องค์ประกอบ (มี Nested Tuple) ไม่เท่ากัน

using System;

public class Demo
{
    public static void Main(string[] args)
    {
        // Tuple 8 องค์ประกอบ: 7 องค์ประกอบแรก + Tuple.Create(50, 100) เป็น Rest
        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
จำนวนองค์ประกอบต่างกันFalse
ประเภทองค์ประกอบต่างกัน (เช่น int vs string)False
ค่าองค์ประกอบใดตัวหนึ่งต่างกันFalse
Nested Tuple ต่างกันFalse (เปรียบเทียบ Recursive)
ทุกอย่างเหมือนกันทุกประการTrue

รายละเอียดเพิ่มเติม

  • Tuple เป็น Reference Type (Class) แต่ Equals เปรียบเทียบ Value Equality (ค่า) ไม่ใช่ Reference
  • GetHashCode() คำนวณจากค่าทุกองค์ประกอบ เหมาะสำหรับใช้เป็น Key ใน Dictionary
  • Tuple เป็น Immutable (ไม่สามารถเปลี่ยนค่าได้หลังสร้าง)

แนะนำ: ใช้ ValueTuple (C# 7.0+)

// ValueTuple - Struct, Mutable, รองรับชื่อองค์ประกอบ
var t1 = (150, 400, 500, 700, 100, 1200, 1500);
var t2 = (150, 400, 500, 700, 100, 1200, 1500);

Console.WriteLine(t1 == t2); // True (ValueTuple overload == operator)

// หรือมีชื่อ
var p1 = (X: 10, Y: 20);
var p2 = (X: 10, Y: 20);
Console.WriteLine(p1 == p2); // True
Console.WriteLine(p1.Equals(p2)); // True

เปรียบเทียบ Tuple vs ValueTuple

คุณสมบัติSystem.Tuple (Class)System.ValueTuple (Struct)
Equals BehaviorValue EqualityValue Equality
== OperatorReference Equality (Default)Value Equality (Overloaded)
MutabilityImmutableMutable
Named Elementsไม่รองรับรองรับ
PerformanceHeap AllocationStack Allocation (เร็วกว่า)