เมธอด 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(แก้ไขทับหรือคืนใหม่)