Прочитать на английском

Поделиться через


BitArray Класс

Определение

Управляет компактным массивом двоичных значений, представленных логическими значениями, где значение true соответствует включенному биту (1), а значение false соответствует отключенному биту (0).

C#
public sealed class BitArray : System.Collections.ICollection
C#
public sealed class BitArray : ICloneable, System.Collections.ICollection
C#
[System.Serializable]
public sealed class BitArray : ICloneable, System.Collections.ICollection
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class BitArray : ICloneable, System.Collections.ICollection
Наследование
BitArray
Атрибуты
Реализации

Примеры

В следующем примере кода показано, как создать и инициализировать BitArray и вывести его значения.

C#
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
*/

Комментарии

Класс 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, который может содержать указанное количество битов с первоначально заданным значением false.

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()

Определяет, задано trueли для всех битов в BitArray .

HasAnySet()

Определяет, задано trueли для любого бита BitArray в .

LeftShift(Int32)

Сдвигает все битовые значения текущего объекта BitArray влево на count бит.

MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
Not()

Обращает все двоичные значения в текущем массиве BitArray таким образом, чтобы каждому элементу со значением true было присвоено значение false, а каждому элементу со значением false было присвоено значение true.

Or(BitArray)

Выполняет побитовую операцию ИЛИ для элементов текущего объекта BitArray и соответствующих элементов указанного массива. В текущем объекте BitArray будет сохранен результат побитовой операции ИЛИ.

RightShift(Int32)

Сдвигает все битовые значения текущего объекта BitArray вправо на count бит.

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.

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Потокобезопасность

Открытые статические (Shared в Visual Basic) члены этого типа являются потокобезопасными. Потокобезопасная работа с членами экземпляров типа не гарантируется.

Эта реализация не предоставляет синхронизированную (потокобезопасную) оболочку BitArrayдля .

Перечисление коллекции не является потокобезопасной процедурой. Даже если коллекция синхронизирована, другие потоки могут ее изменить, что приведет к тому, что перечислитель создаст исключение. Для обеспечения потокобезопасности при перечислении можно либо заблокировать коллекцию на все время перечисления, либо перехватывать исключения, возникающие в результате изменений, внесенных другими потоками.

См. также раздел