BitArray Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Zarządza kompaktową tablicą wartości bitowych, które są reprezentowane jako wartości logiczne, gdzie true
wskazuje, że bit jest włączony (1) i false
wskazuje, że bit jest wyłączony (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
- Dziedziczenie
-
BitArray
- Atrybuty
- Implementuje
Przykłady
W poniższym przykładzie kodu pokazano, jak utworzyć i zainicjować element BitArray oraz jak wydrukować jego wartości.
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
Uwagi
Klasa BitArray jest klasą kolekcji, w której pojemność jest zawsze taka sama jak liczba. Elementy są dodawane do BitArray obiektu przez zwiększenie Length właściwości; elementy są usuwane przez zmniejszenie Length właściwości. Rozmiar obiektu BitArray jest kontrolowany przez klienta; indeksowanie obok końca BitArray zwraca wartość ArgumentException. Klasa BitArray udostępnia metody, które nie znajdują się w innych kolekcjach, w tym te, które umożliwiają modyfikowanie wielu elementów jednocześnie przy użyciu filtru, takiego jak And, Or, Xor , , Noti SetAll.
Klasa BitVector32 jest strukturą, która zapewnia takie same funkcje jak BitArray, ale z szybszą wydajnością. BitVector32 jest szybszy, ponieważ jest to typ wartości, a w związku z tym przydzielony na stosie, natomiast BitArray jest typem odwołania, a zatem przydzielonym na stercie.
System.Collections.Specialized.BitVector32 może przechowywać dokładnie 32 bity, podczas gdy BitArray może przechowywać zmienną liczbę bitów. BitVector32 przechowuje zarówno flagi bitowe, jak i małe liczby całkowite, co czyni je idealnym rozwiązaniem dla danych, które nie są widoczne dla użytkownika. Jeśli jednak liczba wymaganych flag bitów jest nieznana, jest zmienna lub jest większa niż 32, użyj BitArray zamiast tego.
BitArray znajduje się w System.Collections przestrzeni nazw. BitVector32 Znajduje się w System.Collections.Specialized przestrzeni nazw.
Dostęp do elementów w tej kolekcji można uzyskać przy użyciu indeksu całkowitego. Indeksy w tej kolekcji są oparte na zera.
Konstruktory
BitArray(BitArray) |
Inicjuje BitArray nowe wystąpienie klasy zawierającej wartości bitowe skopiowane z określonego BitArrayelementu . |
BitArray(Boolean[]) |
Inicjuje BitArray nowe wystąpienie klasy zawierającej wartości bitowe skopiowane z określonej tablicy wartości logicznych. |
BitArray(Byte[]) |
Inicjuje BitArray nowe wystąpienie klasy zawierającej wartości bitowe skopiowane z określonej tablicy bajtów. |
BitArray(Int32) |
Inicjuje BitArray nowe wystąpienie klasy, które może przechowywać określoną liczbę wartości bitowych, które są początkowo ustawione na |
BitArray(Int32, Boolean) |
Inicjuje BitArray nowe wystąpienie klasy, które może przechowywać określoną liczbę wartości bitowych, które są początkowo ustawione na określoną wartość. |
BitArray(Int32[]) |
Inicjuje BitArray nowe wystąpienie klasy zawierającej wartości bitowe skopiowane z określonej tablicy 32-bitowych liczb całkowitych. |
Właściwości
Count |
Pobiera liczbę elementów zawartych w słowniku BitArray. |
IsReadOnly |
Pobiera wartość wskazującą, czy kolekcja BitArray jest przeznaczona tylko do odczytu. |
IsSynchronized |
Pobiera wartość wskazującą, czy dostęp do elementu BitArray jest synchronizowany (bezpieczny wątek). |
Item[Int32] |
Pobiera lub ustawia wartość bitu w określonej pozycji w obiekcie BitArray. |
Length |
Pobiera lub ustawia liczbę elementów w elemecie BitArray. |
SyncRoot |
Pobiera obiekt, który może służyć do synchronizowania dostępu do obiektu BitArray. |
Metody
And(BitArray) |
Wykonuje bitową operację AND między elementami bieżącego BitArray obiektu a odpowiednimi elementami w określonej tablicy. Bieżący BitArray obiekt zostanie zmodyfikowany w celu przechowywania wyniku operacji AND bitowej. |
Clone() |
Tworzy płytkią kopię elementu BitArray. |
CopyTo(Array, Int32) |
Kopiuje całą BitArray do zgodnej jednowymiarowej Arraytablicy, zaczynając od określonego indeksu tablicy docelowej. |
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
Get(Int32) |
Pobiera wartość bitu w określonej pozycji w obiekcie BitArray. |
GetEnumerator() |
Zwraca moduł wyliczający, który iteruje za pomocą elementu BitArray. |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetType() |
Type Pobiera bieżące wystąpienie. (Odziedziczone po Object) |
HasAllSet() |
Określa, czy wszystkie bity w obiekcie BitArray są ustawione na |
HasAnySet() |
Określa, czy dowolny bit w obiekcie BitArray jest ustawiony na |
LeftShift(Int32) |
Przesuwa wszystkie wartości bitowe bieżącej wartości BitArray po lewej stronie bitów |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
Not() |
Odwraca wszystkie wartości bitów w bieżącym BitArrayelemencie , aby elementy ustawione |
Or(BitArray) |
Wykonuje bitową operację OR między elementami bieżącego BitArray obiektu a odpowiednimi elementami w określonej tablicy. Bieżący BitArray obiekt zostanie zmodyfikowany w celu przechowywania wyniku operacji OR bitowej. |
RightShift(Int32) |
Przesuwa wszystkie wartości bitów bieżącej wartości BitArray po prawej stronie bitów |
Set(Int32, Boolean) |
Ustawia bit w określonej pozycji na BitArray określoną wartość. |
SetAll(Boolean) |
Ustawia wszystkie bity w obiekcie BitArray na określoną wartość. |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
Xor(BitArray) |
Wykonuje bitowo wyłączną operację OR między elementami bieżącego BitArray obiektu względem odpowiednich elementów w określonej tablicy. Bieżący BitArray obiekt zostanie zmodyfikowany w celu przechowywania wyniku operacji OR wykluczanej bitowo. |
Jawne implementacje interfejsu
ICollection.CopyTo(Array, Int32) |
Kopiuje elementy BitArray elementu do obiektu Array, zaczynając od określonego Array indeksu. |
ICollection.Count |
Pobiera liczbę elementów w elemecie BitArray. |
ICollection.IsSynchronized |
Pobiera wartość wskazującą, czy dostęp do elementu BitArray jest synchronizowany (bezpieczny wątek). |
ICollection.SyncRoot |
Pobiera obiekt, który może służyć do synchronizowania dostępu do obiektu BitArray. |
Metody rozszerzania
Cast<TResult>(IEnumerable) |
Rzutuje elementy elementu IEnumerable do określonego typu. |
OfType<TResult>(IEnumerable) |
Filtruje elementy elementu IEnumerable na podstawie określonego typu. |
AsParallel(IEnumerable) |
Umożliwia równoległość zapytania. |
AsQueryable(IEnumerable) |
Konwertuje element IEnumerable na .IQueryable |
Dotyczy
Bezpieczeństwo wątkowe
Publiczne statyczne (Shared
w Visual Basic) elementy członkowskie tego typu są bezpieczne wątkami. Wystąpienia elementów członkowskich nie dają gwarancji bezpieczeństwa wątków.
Ta implementacja nie zapewnia zsynchronizowanej otoki (bezpiecznej wątku) dla elementu BitArray.
Wyliczanie w kolekcji nie jest wewnętrznie procedurą odporną na wielowątkowość. Nawet gdy kolekcja jest synchronizowana, inne wątki nadal mogą ją modyfikować. Powoduje to zgłaszanie wyjątku przez moduł wyliczający. Aby zagwarantować bezpieczeństwo wątków podczas wyliczania, można zablokować kolekcję podczas całego procesu wyliczania albo rejestrować wyjątki wynikłe ze zmian wprowadzanych przez inne wątków.