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


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

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

Определяет, заданы ли все биты в наборе BitArraytrue.

HasAnySet()

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

LeftShift(Int32)

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

MemberwiseClone()

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

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

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

Or(BitArray)

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

PopCount()

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

RightShift(Int32)

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

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объекта.

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

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