C#
 Computer >> コンピューター >  >> プログラミング >> C#

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ループだけで各ビットを簡単に順番に処理できます。ビットフラグの管理やブール値のコレクション操作が必要な場面で、ぜひ活用してみてください。

  1. C#のBitArrayクラスにおけるItemプロパティ(インデクサ)の使い方を解説

    C#のBitArrayクラスには、Itemプロパティが用意されています。このプロパティを使うことで、BitArray内の指定した位置にあるビットの値を取得・設定することができます。Itemプロパティとインデクサの関係C#では、Itemプロパティを直接実装する代わりに、thisキーワードを使用してインデクサを定義するのが一般的な方法です。インデクサを定義しておけば、配列と同じようにmyCollection[index]という形式で要素にアクセスできます。つまり、BitArrayの各ビットに対して、インデックス番号を指定して読み書きが可能になるのです。BitArrayクラスのItemプロパティの実

  2. C#のBitArrayクラスでCountプロパティを使って要素数を取得する方法

    C#のBitArrayクラスにおけるCountプロパティとは?C#のBitArrayクラスは、ビット値(true/false)のコレクションを管理するためのクラスです。このクラスには、Countプロパティが用意されており、これを使うことでBitArrayに含まれる要素(ビット)の総数を簡単に取得できます。なお、BitArrayクラスのCountプロパティは、Lengthプロパティと同じ値を返します。どちらを使用しても要素数は同じになります。BitArrayクラスのインスタンスを作成するまずは、BitArrayクラスのインスタンスを作成しましょう。以下の例では、10個の要素を持つBitArray