C#でBitArrayを列挙子(Enumerator)で反復処理する方法
C#では、BitArrayクラスに格納されたビット値(true/false)を、列挙子(Enumerator)を使って先頭から順番に取り出すことができます。この記事では、IEnumerableインターフェースとforeachループを組み合わせて、BitArrayの各要素を反復処理する方法をサンプルコード付きで解説します。
BitArrayを列挙子で反復処理するサンプルコード
以下のコードでは、2つのBitArrayオブジェクトを作成し、それぞれを列挙子で反復処理した後、Equalsメソッドを使って両者が等しいかどうかを比較しています。
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] = true;
arr1[2] = false;
arr1[3] = true;
arr1[4] = true;
Console.WriteLine("BitArray1を反復処理する列挙子");
IEnumerable demoEnum = arr1;
foreach(Object ob in demoEnum){
Console.WriteLine(ob);
}
arr2[0] = true;
arr2[1] = true;
arr2[2] = true;
arr2[3] = false;
arr2[4] = true;
Console.WriteLine("BitArray2を反復処理する列挙子");
demoEnum = arr2;
foreach(Object ob in demoEnum){
Console.WriteLine(ob);
}
Console.WriteLine("BitArray1はBitArray2と等しいか? = " + arr1.Equals(arr2));
}
}
実行結果
このプログラムを実行すると、次のような出力が得られます。
BitArray1を反復処理する列挙子 False True False True True BitArray2を反復処理する列挙子 True True True False True BitArray1はBitArray2と等しいか? = False
コードのポイント
new BitArray(5)で、5要素分のビット配列を生成します。IEnumerable型の変数demoEnumにBitArrayを代入することで、foreachループによる反復処理が可能になります。Equalsメソッドは、2つのBitArrayの内容が完全に一致する場合のみtrueを返します。上記の例では各要素の値が異なるため、最終的に False が出力されます。
もう一つの例:単一のBitArrayを反復処理する
続いて、1つのBitArrayだけを列挙子で反復処理する、よりシンプルな例を見てみましょう。
using System;
using System.Collections;
public class Demo {
public static void Main(){
BitArray arr = new BitArray(5);
arr[0] = false;
arr[1] = true;
arr[2] = false;
arr[3] = true;
arr[4] = true;
Console.WriteLine("BitArrayを反復処理する列挙子");
IEnumerable demoEnum = arr;
foreach(Object ob in demoEnum){
Console.WriteLine(ob);
}
}
}
実行結果
このプログラムを実行すると、次のような出力が得られます。
BitArrayを反復処理する列挙子 False True False True True
まとめ
BitArrayはSystem.Collections名前空間に属するクラスで、ビット値(true/false)の配列を効率的に扱えます。IEnumerableインターフェース経由で列挙子を取得すれば、foreachループだけで各ビットを簡単に順番に処理できます。ビットフラグの管理やブール値のコレクション操作が必要な場面で、ぜひ活用してみてください。
-
C#のBitArrayクラスにおけるItemプロパティ(インデクサ)の使い方を解説
C#のBitArrayクラスには、Itemプロパティが用意されています。このプロパティを使うことで、BitArray内の指定した位置にあるビットの値を取得・設定することができます。Itemプロパティとインデクサの関係C#では、Itemプロパティを直接実装する代わりに、thisキーワードを使用してインデクサを定義するのが一般的な方法です。インデクサを定義しておけば、配列と同じようにmyCollection[index]という形式で要素にアクセスできます。つまり、BitArrayの各ビットに対して、インデックス番号を指定して読み書きが可能になるのです。BitArrayクラスのItemプロパティの実
-
C#のBitArrayクラスでCountプロパティを使って要素数を取得する方法
C#のBitArrayクラスにおけるCountプロパティとは?C#のBitArrayクラスは、ビット値(true/false)のコレクションを管理するためのクラスです。このクラスには、Countプロパティが用意されており、これを使うことでBitArrayに含まれる要素(ビット)の総数を簡単に取得できます。なお、BitArrayクラスのCountプロパティは、Lengthプロパティと同じ値を返します。どちらを使用しても要素数は同じになります。BitArrayクラスのインスタンスを作成するまずは、BitArrayクラスのインスタンスを作成しましょう。以下の例では、10個の要素を持つBitArray