成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在.NET?7中使用BitArray

譯文
開發 前端
事實表明,利用.NET?7的BitArray類對數據執行逐位操作能夠提高性能。

譯者 | 李睿

審校 | 孫淑娟

.NET 7中的BitArray類是一個健壯的數據結構,用于存儲和操作數據位。BitArray中的每個元素只能保存一個表示為false或true的位(0或1),其中false表示位為off (0), true表示位為on(1)。BitArray可以存儲標志或有效地對數據執行按位操作。

本文將討論在C#中使用BitArray以及相關的代碼示例。要使用本文提供的代碼示例,應該在系統中安裝Visual Studio 2022。

在Visual Studio中創建一個控制臺應用程序項目

首先,在Visual Studio中創建一個.NET Core控制臺應用程序項目。假設系統中已經安裝了Visual Studio 2022,按照下面列出的步驟在Visual Studio中創建一個新的.NET Core控制臺應用程序項目。

(1)啟動Visual Studio IDE。

(2)點擊“創建新項目”。

(3)在“創建新項目”窗口中,從顯示的模板列表中選擇“控制臺應用程序(.NET Core)”。

(4)單擊“下一步”。

(5)在接下來顯示的“配置新項目”窗口中,指定新項目的名稱和位置。

(6)單擊“下一步”。

(7)在接下來顯示的“附加信息”窗口中,選擇“.NET Core預覽版)”作為想使用的框架版本。

(8)單擊“創建”。

在本文中,將使用.NET7控制臺應用程序項目與BitArray一起工作。

什么是BitArray?

BitArray是系統中包含的類型。集合名稱空間表示位值的緊湊數組。這些值表示為布爾值,即true和false。在這里,值true表示位是打開的,值false表示位是關閉的。

因為BitArray類位于系統中。集合命名空間,需要在代碼中包含該命名空間的采用指令。BitArray類在系統中聲明。集合命名空間如下所示:

public sealed class BitArray : ICloneable, System.Collections.ICollection

在.NET 7中創建BitArray

可以創建一個特定大小的BitArray,并用所有錯誤值填充它,例如下面給出的代碼段所示:

var bitArray = new BitArray(10);

還可以傳入一個布爾值列表,以創建特定大小的BitArray并設置值。

var bitArray = new BitArray(new bool[] {true, false, true});

一旦創建了BitArray,就可以使用索引器訪問和操作每個位。索引器期望一個整數并返回或設置該位的值。

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)

下面的代碼片段可用于創建BitArray,設置其元素的值,然后檢索和顯示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));

當執行上面的代碼段時,值true和false將顯示在控制臺窗口中,如圖1所示:

圖1

在BitArray中操作位

可以使用BitArray的索引或使用BitArray類的Get和Set方法來操作BitArray中的位。要從BitArray中設置或檢索多個位,可以使用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屬性。這一屬性返回一個布爾值,指示BitArray是否只讀。下面的代碼片段展示了如何檢查BitArray是否是只讀的。

BitArray bitArray = new BitArray(new byte[] { 0, 1, 0, 1, 0 });
Console.WriteLine(bitArray.IsReadOnly);

當執行上述代碼段時,文本“False”將顯示在控制臺窗口中。

BitArray中的Length和Count屬性

BitArray的Length屬性返回數組中的位數。Count屬性返回BitArray中true和false值的計數。需要注意,Length屬性總是返回數組中的總位數,即使所有位數都為假。換句話說,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);

當執行上述代碼時,輸出將類似于圖2所示。

圖2

可能需要檢查BitArray實例是否同步。這可以通過調用實例的IsSynchronized屬性來完成,如果BitArray已同步,該屬性將返回true,否則返回false。

在BitArray中執行AND, OR和NOT操作

下面的代碼清單顯示了如何在兩個BitArray實例上按位執行AND操作。位與運算如果兩個操作數都為true,則返回true (或1),否則返回false。位OR操作如果其中一個或兩個操作數都為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");
}

當執行上述代碼時,bitArray1的每個元素的值將在AND操作之后顯示出來。

圖3

要在兩個Bitarray上執行按位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執行NOT操作會將所有true元素更改為false,反之亦然。下面的代碼片段將把BitArray1的元素從{true, false, false, true, false}更改為{false, true, true, false, true}。

bitArray1.Not ();

BitArrays的常見用例

BitArray有許多常見的用例,例如用于執行對圖像的按位操作。圖像中每個像素的顏色由一定數量的位來定義。改變像素的顏色需要操縱組成它的比特。使用BitArray,可以很容易地操作數組中的各個位。

BitArray也常用于處理網絡數據包。數據包包含大量的數據,根據協議的不同,這些數據可能被格式化為位或字節??梢允褂肂itArray輕松地提取和操作每個包中包含的位。

還可以在應用程序中使用BitArray來表示布爾值。通過這樣做,可以減少內存和存儲需求。BitArray占用的空間是bool類型的1/8,因為BitArray對每個值只存儲1位。此外,一個字節只能保存8個值,一個整數只能保存32個值,而BitArray可以保存任意數量的布爾值。如果要存儲大量的數據,這種差異可能會非常顯著。

最后,當涉及到處理一個巨大的集合時,一旦開始從內存中獲取數據,BitArray和位處理的優勢就會變得很明顯。例如,包含10000項的BitArray和包含10000項的List在性能上會有顯著差異。List需要的內存讀取量是BitArray的8倍。

原文標題:??How to use BitArray in .NET 7???,作者:Joydip Kanjilal?

責任編輯:華軒 來源: 51CTO
相關推薦

2021-03-09 07:27:40

Kafka開源分布式

2021-03-10 09:40:43

LamarASP容器

2009-01-19 09:14:31

.NETMySQLMySql驅動包

2021-02-03 13:35:25

ASPweb程序

2021-02-28 20:56:37

NCache緩存框架

2021-01-07 07:39:07

工具接口 Swagger

2021-03-03 22:37:16

MediatR中介者模式

2021-01-28 22:39:35

LoggerMessa開源框架

2021-01-31 22:56:50

FromServiceASP

2021-03-17 09:45:31

LazyCacheWindows

2021-02-06 21:40:13

SignalR通訊TypeScript

2021-02-02 16:19:08

Serilog日志框架

2009-02-05 14:02:46

SmtpMail發送郵件ASP.NET

2010-11-18 08:46:27

ASP.NET MVC

2021-02-07 17:29:04

監視文件接口

2017-03-09 13:26:33

2009-03-30 10:34:03

ASP.NETMySQL

2019-09-04 19:32:56

HiveFlink大數據

2016-08-11 10:43:56

2019-09-16 19:00:48

Linux變量
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区亚洲 | 成人毛片网| 国产精品免费av | 亚洲精品视频在线播放 | 日韩免费福利视频 | 美女逼网站 | 国产精品一区二区视频 | 久久久久成人精品亚洲国产 | 日韩在线视频一区 | 亚洲成人精品国产 | 欧美一区免费 | 国产成人综合久久 | 999久久久免费精品国产 | 免费视频一区二区 | 精品国产一区二区三区性色av | 天堂av中文在线 | 中文字幕一区在线观看视频 | 欧美aaaaaaaaaa | 日韩国产中文字幕 | 国产在线精品一区二区三区 | 中文字幕韩在线第一页 | 亚洲一区二区视频 | 在线免费观看成人 | 亚洲毛片在线 | 日本字幕在线观看 | 欧美日韩久 | 欧美在线视频网 | 久久一区二区免费视频 | 亚洲久草 | 日韩三级电影一区二区 | 日韩一区二区三区在线播放 | 91精品国产91久久综合桃花 | 国产高清视频在线观看 | 午夜爽爽男女免费观看hd | 天天综合天天 | 精品99久久久久久 | 国产欧美精品 | 日韩欧美一区二区三区在线播放 | 国产精品亚洲综合 | 日本在线视频一区二区 | 亚洲国产激情 |