BitArray 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
管理位值的压缩数组,这些值以布尔值的形式表示,其中 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 namespace System;
using namespace System::Collections;
void PrintValues( IEnumerable^ myList, int myWidth );
int main()
{
// Creates and initializes several BitArrays.
BitArray^ myBA1 = gcnew BitArray( 5 );
BitArray^ myBA2 = gcnew BitArray( 5,false );
array<Byte>^myBytes = {1,2,3,4,5};
BitArray^ myBA3 = gcnew BitArray( myBytes );
array<Boolean>^myBools = {true,false,true,true,false};
BitArray^ myBA4 = gcnew BitArray( myBools );
array<Int32>^myInts = {6,7,8,9,10};
BitArray^ myBA5 = gcnew 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 );
}
void PrintValues( IEnumerable^ myList, int myWidth )
{
int i = myWidth;
IEnumerator^ myEnum = myList->GetEnumerator();
while ( myEnum->MoveNext() )
{
Object^ obj = safe_cast<Object^>(myEnum->Current);
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
*/
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提供在其他集合中找不到的方法,包括那些允许使用筛选器(如 、、 NotOrXor 、 和 SetAll)And一次修改多个元素的方法。
类 BitVector32 是一个结构,它提供与 相同的功能 BitArray,但具有更快的性能。 BitVector32 速度更快,因为它是值类型,因此在堆栈上分配,而 BitArray 是引用类型,因此在堆上分配。
System.Collections.Specialized.BitVector32 可以恰好存储 32 位,而 BitArray 可以存储可变数量的位。 BitVector32 存储位标志和小整数,因此非常适合不向用户公开的数据。 但是,如果所需位标志的数量未知、为变量或大于 32,请改用 BitArray 。
BitArray 在 命名空间中 System.Collections ; BitVector32 在 命名空间中 System.Collections.Specialized 。
可以使用整数索引访问此集合中的元素。 此集合中的索引从零开始。
构造函数
BitArray(BitArray) | |
BitArray(Boolean[]) |
初始化 BitArray 类的新实例,该实例包含从布尔值指定数组复制的位值。 |
BitArray(Byte[]) |
初始化 BitArray 的新实例,该实例包含从指定的字节数组复制的位值。 |
BitArray(Int32) |
初始化 BitArray 类的新实例,该类可拥有指定数目的位值,位值最初设置为 |
BitArray(Int32, Boolean) |
初始化 BitArray 类的新实例,此实例可以容纳指定数量的位值,并且将其初始值设置为指定值。 |
BitArray(Int32[]) |
初始化 BitArray 类的新实例,该类包含从指定的 32 位整数数组复制的位值。 |
属性
Count |
获取 BitArray 中包含的元素数。 |
IsReadOnly |
获取一个值,该值指示 BitArray 是否为只读。 |
IsSynchronized |
获取一个值,该值指示是否同步对 BitArray 的访问(线程安全)。 |
Item[Int32] |
获取或设置 BitArray 中特定位置的位的值。 |
Length |
获取或设置 BitArray 中的元素数。 |
SyncRoot |
获取可用于同步对 BitArray 的访问的对象。 |
方法
And(BitArray) |
在当前 BitArray 对象中的元素和指定数组中的相应元素之间执行按位“与”运算。 将修改当前 BitArray 对象,以存储按位“与”运算的结果。 |
Clone() |
创建 BitArray 的浅表副本。 |
CopyTo(Array, Int32) | |
Equals(Object) |
确定指定对象是否等于当前对象。 (继承自 Object) |
Get(Int32) |
获取 BitArray 中特定位置处的位的值。 |
GetEnumerator() |
返回循环访问 BitArray 的枚举数。 |
GetHashCode() |
作为默认哈希函数。 (继承自 Object) |
GetType() |
获取当前实例的 Type。 (继承自 Object) |
HasAllSet() |
确定 中的所有 BitArray 位是否都设置为 |
HasAnySet() |
确定 中的 BitArray 任意位是否设置为 |
LeftShift(Int32) |
将当前 BitArray 的所有位值向左移动 |
MemberwiseClone() |
创建当前 Object 的浅表副本。 (继承自 Object) |
Not() |
反转当前 BitArray 中的所有位值,以便将设置为 |
Or(BitArray) |
在当前 BitArray 对象中的元素和指定数组中的相应元素间执行按位“或”运算。 将修改当前 BitArray 对象,以存储按位“或”运算的结果。 |
RightShift(Int32) |
将当前 BitArray 的所有位值向右移动 |
Set(Int32, Boolean) |
将 BitArray 中特定位置处的位设置为指定值。 |
SetAll(Boolean) |
将 BitArray 中的所有位设置为指定值。 |
ToString() |
返回表示当前对象的字符串。 (继承自 Object) |
Xor(BitArray) |
针对指定数组中的相应元素,在当前 BitArray 对象中的元素间执行按位“异或”运算。 将修改当前 BitArray 对象,以存储按位“异或”运算的结果。 |
显式接口实现
ICollection.CopyTo(Array, Int32) | |
ICollection.Count |
获取 BitArray 中的元素数。 |
ICollection.IsSynchronized |
获取一个值,该值指示是否同步对 BitArray 的访问(线程安全)。 |
ICollection.SyncRoot |
获取可用于同步对 BitArray 的访问的对象。 |
扩展方法
Cast<TResult>(IEnumerable) |
将 IEnumerable 的元素强制转换为指定的类型。 |
OfType<TResult>(IEnumerable) |
根据指定类型筛选 IEnumerable 的元素。 |
AsParallel(IEnumerable) |
启用查询的并行化。 |
AsQueryable(IEnumerable) |
将 IEnumerable 转换为 IQueryable。 |
适用于
线程安全性
Visual Basic 中的公共静态 (Shared
) 此类型的成员是线程安全的。 但不保证所有实例成员都是线程安全的。
此实现不会为 BitArray提供同步 (线程安全) 包装器。
枚举整个集合本质上不是一个线程安全的过程。 即使某个集合已同步,其他线程仍可以修改该集合,这会导致枚举数引发异常。 若要确保枚举过程中的线程安全性,可以在整个枚举期间锁定集合,或者捕获由其他线程进行的更改所导致的异常。