新聞中心
譯者 | 李睿

成都創(chuàng)新互聯(lián)是專業(yè)的平安網(wǎng)站建設(shè)公司,平安接單;提供網(wǎng)站制作、網(wǎng)站設(shè)計(jì),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行平安網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
審校 | 孫淑娟
.NET 7中的BitArray類是一個(gè)健壯的數(shù)據(jù)結(jié)構(gòu),用于存儲和操作數(shù)據(jù)位。BitArray中的每個(gè)元素只能保存一個(gè)表示為false或true的位(0或1),其中false表示位為off (0), true表示位為on(1)。BitArray可以存儲標(biāo)志或有效地對數(shù)據(jù)執(zhí)行按位操作。
本文將討論在C#中使用BitArray以及相關(guān)的代碼示例。要使用本文提供的代碼示例,應(yīng)該在系統(tǒng)中安裝Visual Studio 2022。
在Visual Studio中創(chuàng)建一個(gè)控制臺應(yīng)用程序項(xiàng)目
首先,在Visual Studio中創(chuàng)建一個(gè).NET Core控制臺應(yīng)用程序項(xiàng)目。假設(shè)系統(tǒng)中已經(jīng)安裝了Visual Studio 2022,按照下面列出的步驟在Visual Studio中創(chuàng)建一個(gè)新的.NET Core控制臺應(yīng)用程序項(xiàng)目。
(1)啟動(dòng)Visual Studio IDE。
(2)點(diǎn)擊“創(chuàng)建新項(xiàng)目”。
(3)在“創(chuàng)建新項(xiàng)目”窗口中,從顯示的模板列表中選擇“控制臺應(yīng)用程序(.NET Core)”。
(4)單擊“下一步”。
(5)在接下來顯示的“配置新項(xiàng)目”窗口中,指定新項(xiàng)目的名稱和位置。
(6)單擊“下一步”。
(7)在接下來顯示的“附加信息”窗口中,選擇“.NET Core預(yù)覽版)”作為想使用的框架版本。
(8)單擊“創(chuàng)建”。
在本文中,將使用.NET7控制臺應(yīng)用程序項(xiàng)目與BitArray一起工作。
什么是BitArray?
BitArray是系統(tǒng)中包含的類型。集合名稱空間表示位值的緊湊數(shù)組。這些值表示為布爾值,即true和false。在這里,值true表示位是打開的,值false表示位是關(guān)閉的。
因?yàn)锽itArray類位于系統(tǒng)中。集合命名空間,需要在代碼中包含該命名空間的采用指令。BitArray類在系統(tǒng)中聲明。集合命名空間如下所示:
public sealed class BitArray : ICloneable, System.Collections.ICollection
在.NET 7中創(chuàng)建BitArray
可以創(chuàng)建一個(gè)特定大小的BitArray,并用所有錯(cuò)誤值填充它,例如下面給出的代碼段所示:
var bitArray = new BitArray(10);
還可以傳入一個(gè)布爾值列表,以創(chuàng)建特定大小的BitArray并設(shè)置值。
var bitArray = new BitArray(new bool[] {true, false, true});一旦創(chuàng)建了BitArray,就可以使用索引器訪問和操作每個(gè)位。索引器期望一個(gè)整數(shù)并返回或設(shè)置該位的值。
bitArray[0] = true //sets the first bit to true
bitArray[1] = false //sets the second bit to false
bitArray[0] //returns the value of the first bit (as a bool)
下面的代碼片段可用于創(chuàng)建BitArray,設(shè)置其元素的值,然后檢索和顯示BitArray中特定索引的值。
BitArray = new BitArray(5);
bitArray [0] = true;
bitArray [1] = false;
bitArray [2] = true;
bitArray [3] = false;
bitArray [4] = false;
Console.WriteLine (bitArray.Get (2));
Console.WriteLine (bitArray.Get (4));
當(dāng)執(zhí)行上面的代碼段時(shí),值true和false將顯示在控制臺窗口中,如圖1所示:
圖1
在BitArray中操作位
可以使用BitArray的索引或使用BitArray類的Get和Set方法來操作BitArray中的位。要從BitArray中設(shè)置或檢索多個(gè)位,可以使用SetAll()和GetAll()方法,如下面的代碼片段所示:
bitArray.SetAll(false); //set all bits of the bit array to 0
bitArray.Set(0, true); //set first bit of the bit array to 1
bitArray.Set(1, false); //set the second bit of the bit array to 0
bool result = (bitArray[0] == 1); //verify if first bit is equal to 1
檢查BitArray是否只讀
如果需要檢查BitArray是否是只讀的,可以使用IsReadOnly屬性。這一屬性返回一個(gè)布爾值,指示BitArray是否只讀。下面的代碼片段展示了如何檢查BitArray是否是只讀的。
BitArray bitArray = new BitArray(new byte[] { 0, 1, 0, 1, 0 });
Console.WriteLine(bitArray.IsReadOnly);當(dāng)執(zhí)行上述代碼段時(shí),文本“False”將顯示在控制臺窗口中。
BitArray中的Length和Count屬性
BitArray的Length屬性返回?cái)?shù)組中的位數(shù)。Count屬性返回BitArray中true和false值的計(jì)數(shù)。需要注意,Length屬性總是返回?cái)?shù)組中的總位數(shù),即使所有位數(shù)都為假。換句話說,Length和Count屬性將為BitArray顯示相同的值。
下面的代碼說明了如何獲取BitArray的Length和Count。
var bitArray = new BitArray(new bool[] { true, false, true, false });
Console.WriteLine("Length: " + bitArray.Length);
Console.WriteLine("Count: " + bitArray.Count);當(dāng)執(zhí)行上述代碼時(shí),輸出將類似于圖2所示。
圖2
可能需要檢查BitArray實(shí)例是否同步。這可以通過調(diào)用實(shí)例的IsSynchronized屬性來完成,如果BitArray已同步,該屬性將返回true,否則返回false。
在BitArray中執(zhí)行AND, OR和NOT操作
下面的代碼清單顯示了如何在兩個(gè)BitArray實(shí)例上按位執(zhí)行AND操作。位與運(yùn)算如果兩個(gè)操作數(shù)都為true,則返回true (或1),否則返回false。位OR操作如果其中一個(gè)或兩個(gè)操作數(shù)都為true則返回true,否則返回false。
var bitArray1 = new BitArray(new bool[] { true, false, true, false, true });
var bitArray2 = new BitArray(new bool[] { true, false, true, true, true });
bitArray1.Set(0, true);
bitArray1.Set(1, false);
bitArray1.Set(2, true);
bitArray1.Set(3, true);
bitArray1.Set(4, false);
bitArray2.Set(0, true);
bitArray2.Set(1, true);
bitArray2.Set(2, false);
bitArray2.Set(3, true);
bitArray2.Set(4, false);
bitArray1.And(bitArray2);
Console.WriteLine("Displaying the elements of bitArray1 after AND operation");
for (int i = 0; i < bitArray1.Count; i++)
{
Console.Write(bitArray1[i] + "\t");
}當(dāng)執(zhí)行上述代碼時(shí),bitArray1的每個(gè)元素的值將在AND操作之后顯示出來。
圖3
要在兩個(gè)Bitarray上執(zhí)行按位OR操作,只需將AND操作符替換為前面示例中的OR操作符。換句話說,用bitArray1.Or(bitArray2)替換bitArray1.And(bitArray2)。
var bitArray1 = new BitArray(new bool[] { true, false, true, false, true });
var bitArray2 = new BitArray(new bool[] { true, false, true, true, true });
bitArray1.Set(0, true);
bitArray1.Set(1, false);
bitArray1.Set(2, true);
bitArray1.Set(3, true);
bitArray1.Set(4, false);
bitArray2.Set(0, true);
bitArray2.Set(1, true);
bitArray2.Set(2, false);
bitArray2.Set(3, true);
bitArray2.Set(4, false);
bitArray1.Or(bitArray2);
Console.WriteLine("Displaying the elements of bitArray1 after OR operation");
for (int i = 0; i < bitArray1.Count; i++)
{
Console.Write(bitArray1[i] + "\t");
}對BitArray執(zhí)行NOT操作會將所有true元素更改為false,反之亦然。下面的代碼片段將把BitArray1的元素從{true, false, false, true, false}更改為{false, true, true, false, true}。
bitArray1.Not ();
BitArrays的常見用例
BitArray有許多常見的用例,例如用于執(zhí)行對圖像的按位操作。圖像中每個(gè)像素的顏色由一定數(shù)量的位來定義。改變像素的顏色需要操縱組成它的比特。使用BitArray,可以很容易地操作數(shù)組中的各個(gè)位。
BitArray也常用于處理網(wǎng)絡(luò)數(shù)據(jù)包。數(shù)據(jù)包包含大量的數(shù)據(jù),根據(jù)協(xié)議的不同,這些數(shù)據(jù)可能被格式化為位或字節(jié)。可以使用BitArray輕松地提取和操作每個(gè)包中包含的位。
還可以在應(yīng)用程序中使用BitArray來表示布爾值。通過這樣做,可以減少內(nèi)存和存儲需求。BitArray占用的空間是bool類型的1/8,因?yàn)锽itArray對每個(gè)值只存儲1位。此外,一個(gè)字節(jié)只能保存8個(gè)值,一個(gè)整數(shù)只能保存32個(gè)值,而BitArray可以保存任意數(shù)量的布爾值。如果要存儲大量的數(shù)據(jù),這種差異可能會非常顯著。
最后,當(dāng)涉及到處理一個(gè)巨大的集合時(shí),一旦開始從內(nèi)存中獲取數(shù)據(jù),BitArray和位處理的優(yōu)勢就會變得很明顯。例如,包含10000項(xiàng)的BitArray和包含10000項(xiàng)的List在性能上會有顯著差異。List需要的內(nèi)存讀取量是BitArray的8倍。
原文標(biāo)題:??How to use BitArray in .NET 7???,作者:Joydip Kanjilal?
網(wǎng)站題目:如何在.NET?7中使用BitArray
文章網(wǎng)址:http://m.fisionsoft.com.cn/article/cdcdsdo.html


咨詢
建站咨詢
