Ler em inglês

Compartilhar via


BitArray Classe

Definição

Gerencia uma matriz compacta de valores em bits, que é representada com boolianos, em que true indica que o bit está em (1) e false indica que o bit está desativado (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
Herança
BitArray
Atributos
Implementações

Exemplos

O exemplo de código a seguir mostra como criar e inicializar um BitArray e como imprimir seus valores.

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

Comentários

A BitArray classe é uma classe de coleção na qual a capacidade é sempre a mesma que a contagem. Os elementos são adicionados a um BitArray aumentando a propriedade ; os Length elementos são excluídos diminuindo a Length propriedade. O tamanho de um BitArray é controlado pelo cliente; a indexação após o final do BitArray lança um ArgumentException. A BitArray classe fornece métodos que não são encontrados em outras coleções, incluindo aqueles que permitem que vários elementos sejam modificados ao mesmo tempo usando um filtro, como And, Or, Xor , Note SetAll.

A BitVector32 classe é uma estrutura que fornece a mesma funcionalidade que BitArray, mas com desempenho mais rápido. BitVector32 é mais rápido porque é um tipo de valor e, portanto, alocado na pilha, enquanto BitArray é um tipo de referência e, portanto, alocado no heap.

System.Collections.Specialized.BitVector32 pode armazenar exatamente 32 bits, enquanto BitArray pode armazenar um número variável de bits. BitVector32 armazena sinalizadores de bits e números inteiros pequenos, tornando-o ideal para dados que não são expostos ao usuário. No entanto, se o número de sinalizadores de bits necessários for desconhecido, for variável ou for maior que 32, use BitArray em vez disso.

BitArray está no System.Collections namespace; BitVector32 está no System.Collections.Specialized namespace.

Os elementos nesta coleção podem ser acessados usando um índice inteiro. Os índices nesta coleção são baseados em zero.

Construtores

BitArray(BitArray)

Inicializa uma nova instância da classe BitArray que contém valores de bit copiados do BitArray especificado.

BitArray(Boolean[])

Inicializa uma nova instância da classe BitArray que contém valores de bit copiados da matriz de boolianos especificada.

BitArray(Byte[])

Inicializa uma nova instância da classe BitArray que contém valores de bit copiados da matriz de bytes especificada.

BitArray(Int32)

Inicializa uma nova instância da classe BitArray que pode conter o número especificado de valores de bits, que são definidos inicialmente como false.

BitArray(Int32, Boolean)

Inicializa uma nova instância da classe BitArray que pode conter o número especificado de valores de bits, que são definidos inicialmente com o valor especificado.

BitArray(Int32[])

Inicializa uma nova instância da classe BitArray que contém valores de bit copiados da matriz especificada de inteiros de 32 bits.

Propriedades

Count

Obtém o número de elementos contidos no BitArray.

IsReadOnly

Obtém um valor que indica se o BitArray é somente leitura.

IsSynchronized

Obtém um valor que indica se o acesso à BitArray é sincronizado (thread-safe).

Item[Int32]

Obtém ou define o valor do bit em uma posição específica no BitArray.

Length

Obtém ou define o número de elementos no BitArray.

SyncRoot

Obtém um objeto que pode ser usado para sincronizar o acesso ao BitArray.

Métodos

And(BitArray)

Executa a operação AND bit a bit entre os elementos do objeto BitArray atual e os elementos correspondentes na matriz especificada. O objeto BitArray atual será modificado para armazenar o resultado da operação AND bit a bit.

Clone()

Cria uma cópia superficial do BitArray.

CopyTo(Array, Int32)

Copia todo o BitArray em um Array unidimensional compatível, começando no índice especificado da matriz de destino.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
Get(Int32)

Obtém o valor do bit em uma posição específica no BitArray.

GetEnumerator()

Retorna um enumerador que itera por meio de BitArray.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
HasAllSet()

Determina se todos os bits no BitArray estão definidos como true.

HasAnySet()

Determina se algum bit no BitArray está definido truecomo .

LeftShift(Int32)

Desloca todos os valores de bits do BitArray atual para a esquerda em bits count.

MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
Not()

Inverte todos os valores de bit no BitArray atual, para que os elementos definidos como true sejam alterados para false e os elementos definidos como false sejam alterados para true.

Or(BitArray)

Executa a operação OR bit a bit entre os elementos do objeto BitArray atual e os elementos correspondentes na matriz especificada. O objeto BitArray atual será modificado para armazenar o resultado da operação OR bit a bit.

RightShift(Int32)

Desloca todos os valores de bits do BitArray atual para a direita em bits count.

Set(Int32, Boolean)

Obtém o bit em uma posição específica no BitArray para o valor especificado.

SetAll(Boolean)

Define todos os bits no BitArray como o valor especificado.

ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)
Xor(BitArray)

Executa a operação OR exclusiva bit a bit entre os elementos do objeto BitArray atual em relação aos elementos correspondentes na matriz especificada. O objeto BitArray atual será modificado para armazenar o resultado da operação OR exclusiva bit a bit.

Implantações explícitas de interface

ICollection.CopyTo(Array, Int32)

Copia os elementos do BitArray para um Array, começando em no índice Array especificado.

ICollection.Count

Obtém o número de elementos no BitArray.

ICollection.IsSynchronized

Obtém um valor que indica se o acesso ao BitArray é sincronizado (thread-safe).

ICollection.SyncRoot

Obtém um objeto que pode ser usado para sincronizar o acesso ao BitArray.

Métodos de Extensão

Cast<TResult>(IEnumerable)

Converte os elementos de um IEnumerable para o tipo especificado.

OfType<TResult>(IEnumerable)

Filtra os elementos de um IEnumerable com base em um tipo especificado.

AsParallel(IEnumerable)

Habilita a paralelização de uma consulta.

AsQueryable(IEnumerable)

Converte um IEnumerable em um IQueryable.

Aplica-se a

Produto Versões
.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

Acesso thread-safe

Os membros estáticos públicos (Shared no Visual Basic) desse são thread-safe. Não há garantia de que qualquer membro de instância seja seguro para threads.

Essa implementação não fornece um wrapper sincronizado (thread safe) para um BitArray.

A enumeração por meio de uma coleção não é um procedimento thread-safe intrínseco. Mesmo quando uma coleção está sincronizada, outros threads ainda podem modificar a coleção, o que faz o enumerador lançar uma exceção. Para garantir thread-safe durante a enumeração, é possível bloquear a coleção durante toda a enumeração ou verificar as exceções resultantes das alterações feitas por outros threads.

Confira também