次の方法で共有


BitArray クラス

定義

ビット値のコンパクトな配列を管理します。これはブール値として表されます。ここで、 true はビットがオン (1) であることを示し、 false はビットがオフ (0) であることを示します。

public ref class BitArray sealed : System::Collections::ICollection
public ref class BitArray sealed : ICloneable, System::Collections::ICollection
public sealed class BitArray : System.Collections.ICollection
public sealed class BitArray : ICloneable, System.Collections.ICollection
[System.Serializable]
public sealed class BitArray : ICloneable, System.Collections.ICollection
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class BitArray : ICloneable, System.Collections.ICollection
type BitArray = class
    interface ICollection
    interface IEnumerable
type BitArray = class
    interface ICollection
    interface IEnumerable
    interface ICloneable
[<System.Serializable>]
type BitArray = class
    interface ICollection
    interface IEnumerable
    interface ICloneable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type BitArray = class
    interface ICollection
    interface IEnumerable
    interface ICloneable
Public NotInheritable Class BitArray
Implements ICollection
Public NotInheritable Class BitArray
Implements ICloneable, ICollection
継承
BitArray
属性
実装

次のコード例は、 BitArray を作成して初期化する方法と、その値を出力する方法を示しています。

using System;
using System.Collections;
public class SamplesBitArray  {

   public static void Main()  {

      // Creates and initializes several BitArrays.
      BitArray myBA1 = new BitArray( 5 );

      BitArray myBA2 = new BitArray( 5, false );

      byte[] myBytes = new byte[5] { 1, 2, 3, 4, 5 };
      BitArray myBA3 = new BitArray( myBytes );

      bool[] myBools = new bool[5] { true, false, true, true, false };
      BitArray myBA4 = new BitArray( myBools );

      int[]  myInts  = new int[5] { 6, 7, 8, 9, 10 };
      BitArray myBA5 = new BitArray( myInts );

      // Displays the properties and values of the BitArrays.
      Console.WriteLine( "myBA1" );
      Console.WriteLine( "   Count:    {0}", myBA1.Count );
      Console.WriteLine( "   Length:   {0}", myBA1.Length );
      Console.WriteLine( "   Values:" );
      PrintValues( myBA1, 8 );

      Console.WriteLine( "myBA2" );
      Console.WriteLine( "   Count:    {0}", myBA2.Count );
      Console.WriteLine( "   Length:   {0}", myBA2.Length );
      Console.WriteLine( "   Values:" );
      PrintValues( myBA2, 8 );

      Console.WriteLine( "myBA3" );
      Console.WriteLine( "   Count:    {0}", myBA3.Count );
      Console.WriteLine( "   Length:   {0}", myBA3.Length );
      Console.WriteLine( "   Values:" );
      PrintValues( myBA3, 8 );

      Console.WriteLine( "myBA4" );
      Console.WriteLine( "   Count:    {0}", myBA4.Count );
      Console.WriteLine( "   Length:   {0}", myBA4.Length );
      Console.WriteLine( "   Values:" );
      PrintValues( myBA4, 8 );

      Console.WriteLine( "myBA5" );
      Console.WriteLine( "   Count:    {0}", myBA5.Count );
      Console.WriteLine( "   Length:   {0}", myBA5.Length );
      Console.WriteLine( "   Values:" );
      PrintValues( myBA5, 8 );
   }

   public static void PrintValues( IEnumerable myList, int myWidth )  {
      int i = myWidth;
      foreach ( Object obj in myList ) {
         if ( i <= 0 )  {
            i = myWidth;
            Console.WriteLine();
         }
         i--;
         Console.Write( "{0,8}", obj );
      }
      Console.WriteLine();
   }
}


/*
This code produces the following output.

myBA1
   Count:    5
   Length:   5
   Values:
   False   False   False   False   False
myBA2
   Count:    5
   Length:   5
   Values:
   False   False   False   False   False
myBA3
   Count:    40
   Length:   40
   Values:
    True   False   False   False   False   False   False   False
   False    True   False   False   False   False   False   False
    True    True   False   False   False   False   False   False
   False   False    True   False   False   False   False   False
    True   False    True   False   False   False   False   False
myBA4
   Count:    5
   Length:   5
   Values:
    True   False    True    True   False
myBA5
   Count:    160
   Length:   160
   Values:
   False    True    True   False   False   False   False   False
   False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False
    True    True    True   False   False   False   False   False
   False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False
   False   False   False    True   False   False   False   False
   False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False
    True   False   False    True   False   False   False   False
   False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False
   False    True   False    True   False   False   False   False
   False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False
   False   False   False   False   False   False   False   False
*/
Imports System.Collections

Public Class SamplesBitArray

    Public Shared Sub Main()

        ' Creates and initializes several BitArrays.
        Dim myBA1 As New BitArray(5)

        Dim myBA2 As New BitArray(5, False)

        Dim myBytes() As Byte = {1, 2, 3, 4, 5}
        Dim myBA3 As New BitArray(myBytes)

        Dim myBools() As Boolean = {True, False, True, True, False}
        Dim myBA4 As New BitArray(myBools)

        Dim myInts() As Integer = {6, 7, 8, 9, 10}
        Dim myBA5 As New BitArray(myInts)

        ' Displays the properties and values of the BitArrays.
        Console.WriteLine("myBA1")
        Console.WriteLine("   Count:    {0}", myBA1.Count)
        Console.WriteLine("   Length:   {0}", myBA1.Length)
        Console.WriteLine("   Values:")
        PrintValues(myBA1, 8)

        Console.WriteLine("myBA2")
        Console.WriteLine("   Count:    {0}", myBA2.Count)
        Console.WriteLine("   Length:   {0}", myBA2.Length)
        Console.WriteLine("   Values:")
        PrintValues(myBA2, 8)

        Console.WriteLine("myBA3")
        Console.WriteLine("   Count:    {0}", myBA3.Count)
        Console.WriteLine("   Length:   {0}", myBA3.Length)
        Console.WriteLine("   Values:")
        PrintValues(myBA3, 8)

        Console.WriteLine("myBA4")
        Console.WriteLine("   Count:    {0}", myBA4.Count)
        Console.WriteLine("   Length:   {0}", myBA4.Length)
        Console.WriteLine("   Values:")
        PrintValues(myBA4, 8)

        Console.WriteLine("myBA5")
        Console.WriteLine("   Count:    {0}", myBA5.Count)
        Console.WriteLine("   Length:   {0}", myBA5.Length)
        Console.WriteLine("   Values:")
        PrintValues(myBA5, 8)

    End Sub

    Public Shared Sub PrintValues(myList As IEnumerable, myWidth As Integer)
        Dim i As Integer = myWidth
        Dim obj As [Object]
        For Each obj In  myList
            If i <= 0 Then
                i = myWidth
                Console.WriteLine()
            End If
            i -= 1
            Console.Write("{0,8}", obj)
        Next obj
        Console.WriteLine()
    End Sub

End Class


' This code produces the following output.
' 
' myBA1
'    Count:    5
'    Length:   5
'    Values:
'    False   False   False   False   False
' myBA2
'    Count:    5
'    Length:   5
'    Values:
'    False   False   False   False   False
' myBA3
'    Count:    40
'    Length:   40
'    Values:
'     True   False   False   False   False   False   False   False
'    False    True   False   False   False   False   False   False
'     True    True   False   False   False   False   False   False
'    False   False    True   False   False   False   False   False
'     True   False    True   False   False   False   False   False
' myBA4
'    Count:    5
'    Length:   5
'    Values:
'     True   False    True    True   False
' myBA5
'    Count:    160
'    Length:   160
'    Values:
'    False    True    True   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'     True    True    True   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False    True   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'     True   False   False    True   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False    True   False    True   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False
'    False   False   False   False   False   False   False   False

注釈

BitArray クラスは、容量が常にカウントと同じコレクション クラスです。 要素は、Length プロパティを増やすことでBitArrayに追加されます。要素は、Length プロパティを小さくすることで削除されます。 BitArrayのサイズはクライアントによって制御されます。BitArrayの末尾を越えてインデックスを作成すると、ArgumentExceptionがスローされます。 BitArray クラスには、AndOrXorNotSetAllなどのフィルターを使用して複数の要素を一度に変更できるメソッドなど、他のコレクションにはないメソッドが用意されています。

BitVector32 クラスは、BitArrayと同じ機能を提供するが、パフォーマンスが向上する構造体です。 BitVector32 は値型であるため、スタックに割り当てられるため高速です。一方、 BitArray は参照型であるため、ヒープに割り当てられます。

System.Collections.Specialized.BitVector32 は正確に 32 ビットを格納できますが、 BitArray は可変ビット数を格納できます。 BitVector32 はビット フラグと小さな整数の両方を格納するため、ユーザーに公開されていないデータに最適です。 ただし、必要なビット フラグの数が不明な場合、変数である場合、または 32 を超える場合は、代わりに BitArray を使用します。

BitArraySystem.Collections 名前空間にあります。 BitVector32System.Collections.Specialized 名前空間にあります。

このコレクション内の要素には、整数インデックスを使用してアクセスできます。 このコレクション内のインデックスは 0 から始まります。

コンストラクター

名前 説明
BitArray(BitArray)

指定したBitArrayからコピーされたビット値を含むBitArray クラスの新しいインスタンスを初期化します。

BitArray(Boolean[])

指定したブール値の配列からコピーされたビット値を含む BitArray クラスの新しいインスタンスを初期化します。

BitArray(Byte[])

指定したバイト配列からコピーされたビット値を含む BitArray クラスの新しいインスタンスを初期化します。

BitArray(Int32, Boolean)

指定した数のビット値を保持できる BitArray クラスの新しいインスタンスを初期化します。このインスタンスは、最初は指定した値に設定されます。

BitArray(Int32)

指定した数のビット値を保持できる BitArray クラスの新しいインスタンスを初期化します。この値は、最初は false に設定されます。

BitArray(Int32[])

指定した 32 ビット整数配列からコピーされたビット値を含む、 BitArray クラスの新しいインスタンスを初期化します。

プロパティ

名前 説明
Count

BitArrayに含まれる要素の数を取得します。

IsReadOnly

BitArrayが読み取り専用かどうかを示す値を取得します。

IsSynchronized

BitArrayへのアクセスが同期されているかどうかを示す値を取得します (スレッド セーフ)。

Item[Int32]

BitArray内の特定の位置にあるビットの値を取得または設定します。

Length

BitArray内の要素の数を取得または設定します。

SyncRoot

BitArrayへのアクセスを同期するために使用できるオブジェクトを取得します。

メソッド

名前 説明
And(BitArray)

現在の BitArray オブジェクトの要素と、指定した配列内の対応する要素の間でビットごとの AND 演算を実行します。 現在の BitArray オブジェクトは、ビットごとの AND 演算の結果を格納するように変更されます。

Clone()

BitArrayの簡易コピーを作成します。

CopyTo(Array, Int32)

ターゲット配列の指定したインデックスから始まる互換性のある 1 次元Arrayに、BitArray全体をコピーします。

Equals(Object)

指定したオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
Get(Int32)

BitArray内の特定の位置にあるビットの値を取得します。

GetEnumerator()

BitArrayを反復処理する列挙子を返します。

GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
HasAllSet()

BitArray内のすべてのビットがtrueに設定されているかどうかを判断します。

HasAnySet()

BitArray内のビットがtrueに設定されているかどうかを判断します。

LeftShift(Int32)

現在の BitArray のすべてのビット値を、 count ビットの左にシフトします。

MemberwiseClone()

現在の Objectの簡易コピーを作成します。

(継承元 Object)
Not()

現在の BitArray内のすべてのビット値を反転し、 true に設定された要素が falseに変更され、 false に設定された要素が trueに変更されるようにします。

Or(BitArray)

現在の BitArray オブジェクトの要素と、指定した配列内の対応する要素の間でビットごとの OR 演算を実行します。 現在の BitArray オブジェクトは、ビットごとの OR 演算の結果を格納するように変更されます。

PopCount()

ビット値のコンパクトな配列を管理します。これはブール値として表されます。ここで、 true はビットがオン (1) であることを示し、 false はビットがオフ (0) であることを示します。

RightShift(Int32)

現在の BitArray のすべてのビット値を、 count ビットの右にシフトします。

Set(Int32, Boolean)

BitArray内の特定の位置にあるビットを指定した値に設定します。

SetAll(Boolean)

BitArray内のすべてのビットを指定した値に設定します。

ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)
Xor(BitArray)

現在の BitArray オブジェクトの要素間で、指定した配列内の対応する要素に対してビットごとの排他的 OR 演算を実行します。 現在の BitArray オブジェクトは、ビットごとの排他的 OR 演算の結果を格納するように変更されます。

明示的なインターフェイスの実装

名前 説明
ICollection.CopyTo(Array, Int32)

指定したArrayインデックスから始まるBitArrayの要素をArrayにコピーします。

ICollection.Count

BitArray内の要素の数を取得します。

ICollection.IsSynchronized

BitArray へのアクセスが同期される (スレッド セーフ) かどうかを示す値を取得します。

ICollection.SyncRoot

BitArrayへのアクセスを同期するために使用できるオブジェクトを取得します。

拡張メソッド

名前 説明
AsParallel(IEnumerable)

クエリの並列化を有効にします。

AsQueryable(IEnumerable)

IEnumerableIQueryableに変換します。

Cast<TResult>(IEnumerable)

IEnumerable の要素を指定した型にキャストします。

OfType<TResult>(IEnumerable)

指定した型に基づいて、IEnumerable の要素をフィルター処理します。

適用対象

スレッド セーフ

この型のパブリック静的 (Visual Basic のShared ) メンバーはスレッド セーフです。 インスタンス メンバーがスレッド セーフであるとは限りません。

この実装では、 BitArrayの同期 (スレッド セーフ) ラッパーは提供されません。

コレクションを列挙することは、本質的にスレッド セーフなプロシージャではありません。 コレクションが同期されている場合でも、他のスレッドはコレクションを変更できるため、列挙子は例外をスローします。 列挙中のスレッド セーフを保証するには、列挙全体の間にコレクションをロックするか、他のスレッドによって行われた変更によって発生する例外をキャッチします。

こちらもご覧ください