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 — это класс коллекции, в котором емкость всегда совпадает с числом. Элементы добавляются в BitArray объект путем увеличения Length свойства; элементы удаляются путем уменьшения Length свойства. Размер BitArray объекта управляется клиентом; индексирование в конце BitArray вызывает исключение ArgumentException. Класс BitArray предоставляет методы, которые не найдены в других коллекциях, включая те, которые позволяют одновременно изменять несколько элементов с помощью фильтра, например And, , OrXor , Notи SetAll.
Класс BitVector32 — это структура, которая предоставляет те же функциональные возможности, что BitArrayи производительность. BitVector32 быстрее, так как он является типом значения и поэтому выделяется в стеке, в то время как BitArray это ссылочный тип и, следовательно, выделяется в куче.
System.Collections.Specialized.BitVector32 может хранить ровно 32 бита, в то время как BitArray может хранить переменное количество битов. BitVector32 хранит как битовые флаги, так и небольшие целые числа, тем самым делая его идеальным для данных, которые не предоставляются пользователю. Однако если количество обязательных битовых флагов неизвестно, переменная или больше 32, используйте BitArray вместо этого.
BitArrayнаходится в пространстве имен; BitVector32 находится в System.CollectionsSystem.Collections.Specialized пространстве имен.
К элементам этой коллекции можно получить доступ с помощью целочисленного индекса. Индексы в этой коллекции основаны на нулях.
Конструкторы
| Имя | Описание |
|---|---|
| BitArray(BitArray) |
Инициализирует новый экземпляр BitArray класса, который содержит битовые значения, скопированные из указанного BitArray. |
| BitArray(Boolean[]) |
Инициализирует новый экземпляр BitArray класса, который содержит битовые значения, скопированные из указанного массива логических значений. |
| BitArray(Byte[]) |
Инициализирует новый экземпляр BitArray класса, который содержит битовые значения, скопированные из указанного массива байтов. |
| BitArray(Int32, Boolean) |
Инициализирует новый экземпляр BitArray класса, который может содержать указанное количество битовых значений, которые изначально задаются указанным значением. |
| BitArray(Int32) |
Инициализирует новый экземпляр BitArray класса, который может содержать указанное число битовых значений, которые изначально задаются |
| BitArray(Int32[]) |
Инициализирует новый экземпляр BitArray класса, содержащий битовые значения, скопированные из указанного массива 32-разрядных целых чисел. |
Свойства
| Имя | Описание |
|---|---|
| Count |
Возвращает количество элементов, содержащихся в объекте BitArray. |
| IsReadOnly |
Возвращает значение, указывающее, доступен ли доступ BitArray только для чтения. |
| IsSynchronized |
Возвращает значение, указывающее, синхронизирован ли доступ к BitArray синхронизированному (потокобезопасно). |
| Item[Int32] |
Возвращает или задает значение бита в определенной позиции в объекте BitArray. |
| Length |
Возвращает или задает количество элементов в элементе BitArray. |
| SyncRoot |
Получает объект, который можно использовать для синхронизации доступа к объекту BitArray. |
Методы
| Имя | Описание |
|---|---|
| And(BitArray) |
Выполняет побитовую операцию AND между элементами текущего BitArray объекта и соответствующими элементами в указанном массиве. Текущий BitArray объект будет изменен для хранения результата побитовой операции AND. |
| Clone() |
Создает неглубокую копию BitArray. |
| CopyTo(Array, Int32) |
Копирует все BitArray в совместимое одномерное Arrayзначение, начиная с указанного индекса целевого массива. |
| 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) |
Выполняет побитовую операцию OR между элементами текущего BitArray объекта и соответствующими элементами в указанном массиве. Текущий BitArray объект будет изменен для хранения результата побитовой операции OR. |
| PopCount() |
Управляет компактным массивом битовых значений, которые представлены как логические, где |
| RightShift(Int32) |
Сдвигает все битовые значения текущего вправо BitArray на |
| Set(Int32, Boolean) |
Задает бит в определенной позиции в BitArray указанном значении. |
| SetAll(Boolean) |
Задает все биты в BitArray указанном значении. |
| ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
| Xor(BitArray) |
Выполняет побитовую монопольную операцию OR между элементами текущего BitArray объекта с соответствующими элементами в указанном массиве. Текущий BitArray объект будет изменен, чтобы сохранить результат побитовой эксклюзивной операции OR. |
Явные реализации интерфейса
| Имя | Описание |
|---|---|
| ICollection.CopyTo(Array, Int32) |
Копирует элементы объекта BitArrayArrayв заданный индекс, начиная с указанного 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объекта.
Перечисление через коллекцию по сути не является потокобезопасной процедурой. Даже если коллекция синхронизирована, другие потоки по-прежнему могут изменять коллекцию, что приводит к возникновению исключения перечислителем. Чтобы гарантировать безопасность потоков во время перечисления, можно заблокировать коллекцию во время всего перечисления или поймать исключения, полученные из изменений, внесенных другими потоками.