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

การเปรียบเทียบ BitArray สองอันใน C# (Equals)


เมธอด BitArray.Equals() ใน C# ใช้สำหรับตรวจสอบว่า BitArray สองอันเท่ากันหรือไม่ โดยคืนค่า true ก็ต่อเมื่อออบเจ็กต์ทั้งสองเป็นอินสแตนซ์เดียวกัน (reference equality) — ไม่ได้เปรียบเทียบค่าบิตต่อบิต

ตัวอย่างที่ 1: BitArray สองอันที่มีค่าเหมือนกัน (แต่เป็นคนละอินสแตนซ์)

using System;
using System.Collections;

public class Demo
{
    public static void Main()
    {
        BitArray arr1 = new BitArray(2);
        BitArray arr2 = new BitArray(2);

        arr1[0] = false;
        arr1[1] = true;

        Console.WriteLine("Elements in BitArray1...");
        foreach (bool res in arr1)
        {
            Console.WriteLine(res);
        }

        arr2[0] = false;
        arr2[1] = true;

        Console.WriteLine("Elements in BitArray2...");
        foreach (bool res in arr2)
        {
            Console.WriteLine(res);
        }

        BitArray arr3 = new BitArray(2);
        arr3 = arr2;  // arr3 อ้างอิง arr2 เดียวกัน

        Console.WriteLine("Is BitArray2 equal to BitArray3? = " + arr2.Equals(arr3));
    }
}

ผลลัพธ์

Elements in BitArray1...
False
True

Elements in BitArray2...
False
True

Is BitArray2 equal to BitArray3? = True

ตัวอย่างที่ 2: BitArray สองอันที่มีค่าเหมือนกันแต่อินสแตนซ์ต่างกัน

using System;
using System.Collections;

public class Demo
{
    public static void Main()
    {
        BitArray arr1 = new BitArray(2);
        BitArray arr2 = new BitArray(2);

        arr1[0] = false;
        arr1[1] = true;

        Console.WriteLine("Elements in BitArray1...");
        foreach (bool res in arr1)
        {
            Console.WriteLine(res);
        }

        arr2[0] = false;
        arr2[1] = true;

        Console.WriteLine("Elements in BitArray2...");
        foreach (bool res in arr2)
        {
            Console.WriteLine(res);
        }

        Console.WriteLine("Is BitArray1 equal to BitArray2? = " + arr1.Equals(arr2));
    }
}

ผลลัพธ์

Elements in BitArray1...
False
True

Elements in BitArray2...
False
True

Is BitArray1 equal to BitArray2? = False

ข้อสังเกตสำคัญ — Equals() ไม่เปรียบเทียบค่าบิต!

  • BitArray.Equals(object) ใช้ reference equality — คืน true ก็ต่อเมื่ออ้างอิงออบเจ็กต์เดียวกัน
  • แม้บิตทุกตัวจะเหมือนกันหมด ก็ยังคืน false หากเป็นคนละอินสแตนซ์
  • นี่คือพฤติกรรมมาตรฐานของ object.Equals() — BitArray ไม่ได้ override

วิธีเปรียบเทียบค่าบิต (Content Equality)

public static bool BitArraysEqual(BitArray a, BitArray b)
{
    if (a.Count != b.Count) return false;
    for (int i = 0; i < a.Count; i++)
    {
        if (a[i] != b[i]) return false;
    }
    return true;
}

// หรือใช้ LINQ (.NET 3.5+)
public static bool BitArraysEqualLinq(BitArray a, BitArray b)
{
    return a.Count == b.Count && a.Cast().SequenceEqual(b.Cast());
}

คำแนะนำ

  • ใช้เมธอดช่วยเหลือด้านบนเพื่อเปรียบเทียบเนื้อหา BitArray
  • BitArray เหมาะสำหรับจัดเก็บบิตจำนวนมาก (ประหยัดหน่วยความจำ 8 เท่าของ bool[])
  • มีเมธอดบิตเวทย์: And, Or, Xor, Not (แก้ไขทับหรือคืนใหม่)