通过


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属性来删除元素。 客户端控制 a BitArray 的大小;索引超过引发的末尾 BitArrayArgumentExceptionBitArray类提供在其他集合中未找到的方法,包括那些允许使用筛选器(例如AndOrXorNotSetAll)一次性修改多个元素的方法。

BitVector32 类是一种结构,提供的功能与性能 BitArray更快,但功能相同。 BitVector32 速度更快,因为它是一种值类型,因此在堆栈上分配,而 BitArray 它是引用类型,因此是在堆上分配的。

System.Collections.Specialized.BitVector32 可以完全存储 32 位,而 BitArray 可以存储可变数量的位。 BitVector32 存储位标志和小整数,从而使它非常适合不向用户公开的数据。 但是,如果所需的位标志数未知、可变或大于 32,请改用 BitArray

BitArray 位于命名空间中 System.Collections ; BitVector32 位于命名空间中 System.Collections.Specialized

可以使用整数索引访问此集合中的元素。 此集合中的索引从零开始。

构造函数

名称 说明
BitArray(BitArray)

初始化类的新实例,该实例 BitArray 包含从指定的 BitArray位值复制的位值。

BitArray(Boolean[])

初始化类的新实例,该实例 BitArray 包含从指定的布尔值数组复制的位值。

BitArray(Byte[])

初始化类的新实例,该实例 BitArray 包含从指定的字节数组复制的位值。

BitArray(Int32, Boolean)

初始化类的新实例,该实例 BitArray 可以保存指定数量的位值,这些值最初设置为指定值。

BitArray(Int32)

初始化类的新实例,该实例 BitArray 可以保存最初设置为 false的指定位值数。

BitArray(Int32[])

初始化类的新实例,该实例 BitArray 包含从 32 位整数的指定数组复制的位值。

属性

名称 说明
Count

获取包含在 . 中的 BitArray元素数。

IsReadOnly

获取一个值,该值指示是否 BitArray 为只读。

IsSynchronized

获取一个值,该值指示对 BitArray 同步的访问是否同步(线程安全)。

Item[Int32]

获取或设置位于特定位置的 BitArray位的值。

Length

获取或设置 . 中的 BitArray元素数。

SyncRoot

获取可用于同步对 . BitArray的访问的对象。

方法

名称 说明
And(BitArray)

在当前 BitArray 对象的元素与指定数组中的相应元素之间执行按位 AND 运算。 将修改当前 BitArray 对象以存储按位 AND 操作的结果。

Clone()

创建浅 BitArray表副本。

CopyTo(Array, Int32)

将整个 BitArray 复制到兼容的一维 Array,从目标数组的指定索引处开始。

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 对象的元素之间的按位排他或运算。 将修改当前 BitArray 对象以存储按位排他 OR 操作的结果。

显式接口实现

名称 说明
ICollection.CopyTo(Array, Int32)

将元素BitArray复制到从指定Array索引处开始的元素Array

ICollection.Count

获取 . 中的 BitArray元素数。

ICollection.IsSynchronized

获取一个值,该值指示是否同步对 BitArray 的访问(线程安全)。

ICollection.SyncRoot

获取可用于同步对 . BitArray的访问的对象。

扩展方法

名称 说明
AsParallel(IEnumerable)

启用查询的并行化。

AsQueryable(IEnumerable)

IEnumerable 转换为 IQueryable

Cast<TResult>(IEnumerable)

IEnumerable 的元素强制转换为指定类型。

OfType<TResult>(IEnumerable)

根据指定类型筛选 IEnumerable 的元素。

适用于

线程安全性

此类型的公共静态(Shared 在 Visual Basic 中)成员是线程安全的。 不能保证任何实例成员是线程安全的。

此实现不提供同步的(线程安全)包装器 BitArray

通过集合进行枚举本质上不是线程安全的过程。 即使集合同步,其他线程仍可以修改集合,这会导致枚举器引发异常。 若要保证枚举期间的线程安全性,可以在整个枚举期间锁定集合,也可以捕获由其他线程所做的更改导致的异常。

另请参阅