“C# – Koleksiyonlar” başlıklı yazımızda koleksiyonların avantajlarından, dezavantajlarından bahsedip, genel bir bilgi vermiştik. Bu yazımızda ise bir koleksiyon sınıfı olan BitArray‘den bahsedeceğiz.
BitArray Sınıfının Temel Yapısı
BitArray, isminden de anlaşılacağı üzere bir bit dizisidir ve yalnızca True–False değerlerini içermektedir. Bitleri saklamak haricinde And,Or, Xor gibi mantıksal işlemleri de gerçekleştirebilmektedir.
BitArray diğer koleksiyon sınıfları gibi dinamik bir yapıya sahiptir. Yani boyutu dinamik olarak artmaktadır. Ayrıca standart diziler gibi BitArray’ler de indekslenebilir. Bir elemanın değerini almak ya da değiştirmek için indeksleyiciyi kullanabilirsiniz.
BitArray Sınıfındaki Yapılandırıcılar
BitArray sınıfından nesne oluştururken kullandığımız 6 adet yapılandırıcı bulunmakta.
- BitArray(bool[] bitler)
bitler dizisi içerisinde yer alan elemanlar, sıraları dahi değiştirilmeden koleksiyon içerisine eklenecektir.bool[] bitler = { true, false, true, true, false }; BitArray bitDizisi = new BitArray(bitler); // Koleksiyondaki bit sayısı: 5
- BitArray(byte[] Sayilar)
Byte tipinde tanımlanan bir dizi içerisindeki tüm sayılar 8 bit ile ifade edilmektedir. Sayilar dizisi içerisinde 3 adet sayı bulunmaktadır ve her biri 8 bit ile ifade edileceğinden koleksiyon içerisindeki bit sayısı 24 olacaktır. İlk 8 bit Sayilar dizisinin birinci elemanını(Sayilar[0]), ikinci 8 bit Sayilar dizisinin ikinci elemanını(Sayilar[1]) ve üçüncü 8 bitte Sayilar dizisinin üçüncü elemanını(Sayilar[2]) belirtecektir.byte[] Sayilar = { 18, 56, 21 }; BitArray bitDizisi = new BitArray(Sayilar); // Koleksiyondaki Bit Sayısı:24
- BitArray(int[] Sayilar)
İnt tipinde tanımlanan bir dizi içerisindeki tüm sayılar 32 bit ile ifade edilmektedir. Sayilar dizisi içerisinde 3 adet sayı bulunmaktadır ve her biri 32 bit ile ifade edileceğinden koleksiyon içerisindeki bit sayısı 96 olacaktır. İlk 32 bit Sayilar dizinin birinci elemanını(Sayilar[0]), ikinci 32 bit Sayilar dizisinin ikinci elemanını(Sayilar[1]) belirtecek şekilde…int[] Sayilar = { 128, 134, 569 }; BitArray bitDizisi = new BitArray(Sayilar); // Koleksiyondaki Bit Sayısı:96
- BitArray(int buyukluk)
Argüman olarak girdiğimiz sayı büyüklüğünde bir BitArray oluşturmaktadır. Aşağıdaki örneğimizde 20 bitlik bir bit dizisi oluşturduk. Koleksiyon içindeki bitlere ilk değer olarak False atanacaktır.BitArray bitDizisi = new BitArray(20); // Koleksiyondaki Bit Sayısı:20
- BitArray(int buyukluk, bool deger)
Bu yapılandırıcıda, bir önceki yapılandırıcıdan farklı olarak koleksiyon içerisindeki bitlerin ilk değerlerini de belirte biliyoruz. Aşağıdaki örnekte 20 bitlik bir bit dizisi oluşturduk ve bu bitlere ilk değer olarak True atadık.BitArray bitDizisi = new BitArray(20, true); // Koleksiyondaki Bit Sayısı:20
- BitArray(BitArray bitDizisi)
Mevcut olan bir BitArray’den yeni bir BitArray oluşturabiliriz.bool[] bitler = { true, false, true, true, false }; BitArray bitDizisi1 = new BitArray(bitler); BitArray bitDizisi2 = new BitArray(bitDizisi1);
Metotlar ve Özellikler
- Count ve Length Özellikleri
Count, BitArray’in büyüklüğünü döndüren salt okunur bir özelliktir. Length ise BitArray’in büyüklüğünü döndürmekle beraber değiştirebilen bir özelliktir. Eğer BitArray küçültülürse uçtaki yüksek değerlikli bitler kaybolacaktır, büyütülürse de uç kısma sıfır değerinde bitler eklenecektir.bool[] bitler = { true, false, true, true, false, true }; BitArray bitDizisi = new BitArray(bitler); // Çıktı: Bit Sayısı:6 Console.WriteLine("Bit Sayısı:" + bitDizisi.Count); // Çıktı: True False True True False True foreach (bool bit in bitDizisi) Console.Write("{0,-6}", bit); bitDizisi.Length = 4; // Çıktı: Bit Sayısı:4 Console.WriteLine("\nBit Sayısı:" + bitDizisi.Count); // Çıktı: True False True True foreach (bool bit in bitDizisi) Console.Write("{0,-6}", bit);
- Not(), And(), Or() ve Xor() Metotları
Not() metodu, çağrıda bulunulan koleksiyon üzerinde mantıksal değil işlemi gerçekleştirip, sonucu bir BitArray olarak döndürür. And(), Or() ve Xor() Metotları ise iki BitArray koleksiyonunu mantıksal VE, VEYA, ÖZEL VEYA işlemine tabi tutup sonucu bir BitArray olarak döndürür.static void EkranaYaz(BitArray ba) { Console.WriteLine(); for (int i = 0; i < ba.Count; i++) { Console.Write("{0,-6}", ba[i]); // Koleksiyon içerisindeki bitler 8 bitlik bloklara ayrıldı. if ((i + 1) % 8 == 0) Console.WriteLine(); } } static void Main(string[] args) { byte[] Sayilar = { 18, 26 }; BitArray bitDizisi = new BitArray(Sayilar); // Çıktı: Bit Sayısı:16 Console.WriteLine("Bit Sayısı:" + bitDizisi.Count); EkranaYaz(bitDizisi); // bitDizisi koleksiyonu üzerinde mantıksal değil işlemini gerçekleştirildi. BitArray Not_bitDizisi = bitDizisi.Not(); EkranaYaz(Not_bitDizisi); // bitDizisi ve Not_bitDizisi koleksiyonları mantıksal VE(AND) işlemine tabi tutuldu. BitArray And_bitDizisi = bitDizisi.And(Not_bitDizisi); EkranaYaz(And_bitDizisi); // bitDizisi ve Not_bitDizisi koleksiyonları mantıksal VEYA(OR) işlemine tabi tutuldu. BitArray Or_bitDizisi = bitDizisi.Or(Not_bitDizisi); EkranaYaz(Or_bitDizisi); // bitDizisi ve Not_bitDizisi koleksiyonları mantıksal ÖZEL VEYA(XOR) işlemine tabi tutuldu. BitArray Xor_bitDizisi = bitDizisi.Xor(Not_bitDizisi); EkranaYaz(Xor_bitDizisi); }
- Set(int i, bool v) ve SetAll(bool v) Metotları
Set() Metodu, i. indeksteki bite belirtilen v değerini(True/False) atar. SetAll() metodu ise koleksiyondaki tüm bitlere v değerini(True/False) atar.bool[] bitler = { true, false, true, true, false, true }; BitArray bitDizisi = new BitArray(bitler); // 0.indeksteki bite False değeri atandı. bitDizisi.Set(0, false); // Çıktı: False False True True False True foreach (bool bit in bitDizisi) Console.Write("{0,-6}", bit); Console.WriteLine(); // Koleksiyondaki tüm bitlere True değeri atandı. bitDizisi.SetAll(true); // Çıktı: True True True True True True foreach (bool bit in bitDizisi) Console.Write("{0,-6}", bit);
- Get(int i) Metodu
i. indeksteki bitin değerini(True/False) döndürür.bool[] bitler = { true, false, true, true, false, false }; BitArray bitDizisi = new BitArray(bitler); // 0.indeksteki bitin değeri "deger" değişkenine atandı. bool deger = bitDizisi.Get(0); // Çıktı: True Console.WriteLine(deger);
Serdar Yılmaz
Teşekkür ederim, buna ihtiyacım vardı.