ภาพรวม
BitArray ใน namespace System.Collections จัดการอาร์เรย์บิตแบบกะทัดรัด โดยแต่ละบิตแสดงเป็นค่า Boolean (true = 1, false = 0) เหมาะสำหรับการจัดการแฟล็กจำนวนมาก bitmap หรือชุดค่าบูลีน
เมธอดหลักของ BitArray
| ลำดับ | เมธอดและคำอธิบาย |
|---|---|
| 1 | public BitArray And(BitArray value); - ดำเนินการ AND แบบบิตกับ BitArray อีกตัวหนึ่ง คืนค่า BitArray ใหม่ |
| 2 | public bool Get(int index); - ดึงค่าบิตที่ตำแหน่งที่ระบุ |
| 3 | public BitArray Not(); - กลับค่าบิตทั้งหมด (true ↔ false) คืนค่า BitArray ใหม่ |
| 4 | public BitArray Or(BitArray value); - ดำเนินการ OR แบบบิต คืนค่า BitArray ใหม่ |
| 5 | public void Set(int index, bool value); - ตั้งค่าบิตที่ตำแหน่งที่ระบุ |
| 6 | public void SetAll(bool value); - ตั้งค่าบิตทั้งหมดเป็นค่าที่ระบุ |
| 7 | public BitArray Xor(BitArray value); - ดำเนินการ XOR แบบบิต คืนค่า BitArray ใหม่ |
ตัวอย่างที่ 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);
}
Console.WriteLine("Is BitArray1 equal to BitArray2? = " + arr2.Equals(arr1));
Console.WriteLine("Is BitArray synchronized? = " + arr2.IsSynchronized);
Console.WriteLine("Is BitArray read-only? = " + arr2.IsReadOnly);
}
}
ผลลัพธ์
Elements in BitArray1...
False
True
Elements in BitArray2...
False
True
Is BitArray1 equal to BitArray2? = False
Is BitArray synchronized? = False
Is BitArray read-only? = False
ตัวอย่างที่ 2: การดำเนินการ XOR แบบบิต
using System;
using System.Collections;
public class Demo
{
public static void Main()
{
BitArray arr1 = new BitArray(5);
BitArray arr2 = new BitArray(5);
arr1[0] = false;
arr1[1] = false;
arr2[0] = false;
arr2[1] = true;
Console.WriteLine("BitArray1 elements...");
foreach (bool res in arr1)
{
Console.WriteLine(res);
}
Console.WriteLine("\nBitArray2 elements...");
foreach (bool res in arr2)
{
Console.WriteLine(res);
}
Console.WriteLine("\nBitwise exclusive OR operation...");
IEnumerable demoEnum = arr1.Xor(arr2);
foreach(Object ob in demoEnum)
{
Console.WriteLine(ob);
}
}
}
ผลลัพธ์
BitArray1 elements...
False
False
False
False
False
BitArray2 elements...
False
True
False
False
False
Bitwise exclusive OR operation...
False
True
False
False
False
คำอธิบายเพิ่มเติม
- BitArray ไม่ใช่ generic type เก็บค่าเป็น bool แต่อัดหลายบิตในหน่วยความจำ (8 บิตต่อไบต์)
- เมธอด And, Or, Xor, Not คืนค่า BitArray ใหม่ ไม่แก้ไขอินสแตนซ์เดิม (immutable operations)
Equals()เปรียบเทียบอ้างอิง ใช้Cast<bool>().SequenceEqual()สำหรับเปรียบเทียบค่า- คุณสมบัติ
IsSynchronizedและIsReadOnlyเสมอคืนค่า false (BitArray ไม่ได้เป็น thread-safe โดยค่าเริ่มต้น) - สร้างจากอาร์เรย์บูลีน:
new BitArray(bool[])หรือจากตัวเลข:new BitArray(int[]),new BitArray(byte[])