如何在.NET 7中使用BitArray

译者 | 李睿

成都创新互联是专业的平安网站建设公司,平安接单;提供网站制作、网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行平安网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

审校 | 孙淑娟

.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也常用于处理网络数据包。数据包包含大量的数据,根据协议的不同,这些数据可能被格式化为位或字节。可以使用BitArray轻松地提取和操作每个包中包含的位。

还可以在应用程序中使用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

文章标题:如何在.NET 7中使用BitArray
链接分享:http://www.hantingmc.com/qtweb/news9/151259.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联