如何在.NET?7中使用BitArray
譯文譯者 | 李睿
審校 | 孫淑娟
.NET 7中的BitArray類是一個健壯的數(shù)據(jù)結(jié)構(gòu),用于存儲和操作數(shù)據(jù)位。BitArray中的每個元素只能保存一個表示為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)建一個控制臺應(yīng)用程序項目
首先,在Visual Studio中創(chuàng)建一個.NET Core控制臺應(yīng)用程序項目。假設(shè)系統(tǒng)中已經(jīng)安裝了Visual Studio 2022,按照下面列出的步驟在Visual Studio中創(chuàng)建一個新的.NET Core控制臺應(yīng)用程序項目。
(1)啟動Visual Studio IDE。
(2)點擊“創(chuàng)建新項目”。
(3)在“創(chuàng)建新項目”窗口中,從顯示的模板列表中選擇“控制臺應(yīng)用程序(.NET Core)”。
(4)單擊“下一步”。
(5)在接下來顯示的“配置新項目”窗口中,指定新項目的名稱和位置。
(6)單擊“下一步”。
(7)在接下來顯示的“附加信息”窗口中,選擇“.NET Core預(yù)覽版)”作為想使用的框架版本。
(8)單擊“創(chuàng)建”。
在本文中,將使用.NET7控制臺應(yīng)用程序項目與BitArray一起工作。
什么是BitArray?
BitArray是系統(tǒng)中包含的類型。集合名稱空間表示位值的緊湊數(shù)組。這些值表示為布爾值,即true和false。在這里,值true表示位是打開的,值false表示位是關(guān)閉的。
因為BitArray類位于系統(tǒng)中。集合命名空間,需要在代碼中包含該命名空間的采用指令。BitArray類在系統(tǒng)中聲明。集合命名空間如下所示:
在.NET 7中創(chuàng)建BitArray
可以創(chuàng)建一個特定大小的BitArray,并用所有錯誤值填充它,例如下面給出的代碼段所示:
還可以傳入一個布爾值列表,以創(chuàng)建特定大小的BitArray并設(shè)置值。
一旦創(chuàng)建了BitArray,就可以使用索引器訪問和操作每個位。索引器期望一個整數(shù)并返回或設(shè)置該位的值。
下面的代碼片段可用于創(chuàng)建BitArray,設(shè)置其元素的值,然后檢索和顯示BitArray中特定索引的值。
當(dāng)執(zhí)行上面的代碼段時,值true和false將顯示在控制臺窗口中,如圖1所示:
圖1
在BitArray中操作位
可以使用BitArray的索引或使用BitArray類的Get和Set方法來操作BitArray中的位。要從BitArray中設(shè)置或檢索多個位,可以使用SetAll()和GetAll()方法,如下面的代碼片段所示:
檢查BitArray是否只讀
如果需要檢查BitArray是否是只讀的,可以使用IsReadOnly屬性。這一屬性返回一個布爾值,指示BitArray是否只讀。下面的代碼片段展示了如何檢查BitArray是否是只讀的。
當(dāng)執(zhí)行上述代碼段時,文本“False”將顯示在控制臺窗口中。
BitArray中的Length和Count屬性
BitArray的Length屬性返回數(shù)組中的位數(shù)。Count屬性返回BitArray中true和false值的計數(shù)。需要注意,Length屬性總是返回數(shù)組中的總位數(shù),即使所有位數(shù)都為假。換句話說,Length和Count屬性將為BitArray顯示相同的值。
下面的代碼說明了如何獲取BitArray的Length和Count。
當(dāng)執(zhí)行上述代碼時,輸出將類似于圖2所示。
圖2
可能需要檢查BitArray實例是否同步。這可以通過調(diào)用實例的IsSynchronized屬性來完成,如果BitArray已同步,該屬性將返回true,否則返回false。
在BitArray中執(zhí)行AND, OR和NOT操作
下面的代碼清單顯示了如何在兩個BitArray實例上按位執(zhí)行AND操作。位與運算如果兩個操作數(shù)都為true,則返回true (或1),否則返回false。位OR操作如果其中一個或兩個操作數(shù)都為true則返回true,否則返回false。
當(dāng)執(zhí)行上述代碼時,bitArray1的每個元素的值將在AND操作之后顯示出來。
圖3
要在兩個Bitarray上執(zhí)行按位OR操作,只需將AND操作符替換為前面示例中的OR操作符。換句話說,用bitArray1.Or(bitArray2)替換bitArray1.And(bitArray2)。
對BitArray執(zhí)行NOT操作會將所有true元素更改為false,反之亦然。下面的代碼片段將把BitArray1的元素從{true, false, false, true, false}更改為{false, true, true, false, true}。
BitArrays的常見用例
BitArray有許多常見的用例,例如用于執(zhí)行對圖像的按位操作。圖像中每個像素的顏色由一定數(shù)量的位來定義。改變像素的顏色需要操縱組成它的比特。使用BitArray,可以很容易地操作數(shù)組中的各個位。
BitArray也常用于處理網(wǎng)絡(luò)數(shù)據(jù)包。數(shù)據(jù)包包含大量的數(shù)據(jù),根據(jù)協(xié)議的不同,這些數(shù)據(jù)可能被格式化為位或字節(jié)??梢允褂肂itArray輕松地提取和操作每個包中包含的位。
還可以在應(yīng)用程序中使用BitArray來表示布爾值。通過這樣做,可以減少內(nèi)存和存儲需求。BitArray占用的空間是bool類型的1/8,因為BitArray對每個值只存儲1位。此外,一個字節(jié)只能保存8個值,一個整數(shù)只能保存32個值,而BitArray可以保存任意數(shù)量的布爾值。如果要存儲大量的數(shù)據(jù),這種差異可能會非常顯著。
最后,當(dāng)涉及到處理一個巨大的集合時,一旦開始從內(nèi)存中獲取數(shù)據(jù),BitArray和位處理的優(yōu)勢就會變得很明顯。例如,包含10000項的BitArray和包含10000項的List在性能上會有顯著差異。List需要的內(nèi)存讀取量是BitArray的8倍。
原文標(biāo)題:??How to use BitArray in .NET 7???,作者:Joydip Kanjilal?