読者です 読者をやめる 読者になる 読者になる

【C#】BitArray覚えた

C# Unity

BitArrayとはビット値の小型の配列を管理するクラス

基本の使い方

例えば4ビットを管理するクラスを生成する

// BitArray生成
BitArray bits = new BitArray(4); // [false,false,false,false]で初期化
// ビット2をtrueに設定
bits.Set(2,true);
// ビット2はtrueかどうか判定
if(bits.Get(2)) { /*do something*/ }

インデクサも使えます

bits[2] = true;
if(bits[2]) { /*do something*/ }

BitArrayのメソッドを拡張する

C++のstd::bitsetを参考に実装してみた

using System.Collections;
public static class BitArrayExtension
{
    // いずれかのビットがONになっているかを取得する
    public static bool Any(this BitArray array)
    {
        foreach(bool bit in array) if(bit) return true;
        return false;
    }
    // すべてビットがONしてるか取得する
    public static bool All(this BitArray array)
    {
        foreach(bool bit in array) if(!bit) return false;
        return true;
    }
    // すべてのビットがOFFになっているかを取得する
    public static bool None(this BitArray array)
    {
        return !Any(array);
    }
    // 指定ビットを反転する
    public static void Flip(this BitArray array,int index)
    {
        array.Set(index,!array.Get(index));
    }
}

こんな感じ使う

BitArray bits = new BitArray(4);
if(bits.Any())  { /*いずれかのビットがONした*/ }
if(bits.All())  { /*すべてのビットがONした*/ }
if(bits.None()) { /*すべてのビットがOFFした*/ }
bits.Flip(3); // bits[3]反転する