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 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 является классом коллекции, в котором емкость всегда совпадает с количеством. Элементы добавляются в путем BitArray увеличения Length свойства ; элементы удаляются путем уменьшения Length свойства . Размер BitArray объекта контролируется клиентом; индексирование после конца BitArray вызывает исключение ArgumentException. Класс BitArray предоставляет методы, которые не найдены в других коллекциях, включая методы, позволяющие изменять несколько элементов одновременно с помощью фильтра, например And, Or, Xor , Notи SetAll.
Класс 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) |
Инициализирует новый экземпляр класса 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) |
Копирует целый массив BitArray в совместимый одномерный массив Array, начиная с заданного индекса целевого массива. |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
Get(Int32) |
Получает значение бита в указанной позиции в массиве BitArray. |
GetEnumerator() |
Возвращает перечислитель, осуществляющий перебор элементов списка BitArray. |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
HasAllSet() |
Определяет, задано |
HasAnySet() |
Определяет, задано |
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) |
Копирует элементы коллекции BitArray в Array, начиная с указанного индекса Array. |
ICollection.Count |
Возвращает количество элементов в BitArray. |
ICollection.IsSynchronized |
Получает значение, определяющее, является ли доступ к коллекции BitArray синхронизированным (потокобезопасным). |
ICollection.SyncRoot |
Получает объект, с помощью которого можно синхронизировать доступ к коллекции BitArray. |
Методы расширения
Cast<TResult>(IEnumerable) |
Приводит элементы объекта IEnumerable к заданному типу. |
OfType<TResult>(IEnumerable) |
Выполняет фильтрацию элементов объекта IEnumerable по заданному типу. |
AsParallel(IEnumerable) |
Позволяет осуществлять параллельный запрос. |
AsQueryable(IEnumerable) |
Преобразовывает коллекцию IEnumerable в объект IQueryable. |
Применяется к
Потокобезопасность
Открытые статические (Shared
в Visual Basic) члены этого типа являются потокобезопасными. Потокобезопасная работа с членами экземпляров типа не гарантируется.
Эта реализация не предоставляет синхронизированную (потокобезопасную) оболочку BitArrayдля .
Перечисление коллекции не является потокобезопасной процедурой. Даже если коллекция синхронизирована, другие потоки могут ее изменить, что приведет к тому, что перечислитель создаст исключение. Для обеспечения потокобезопасности при перечислении можно либо заблокировать коллекцию на все время перечисления, либо перехватывать исключения, возникающие в результате изменений, внесенных другими потоками.