译者 | 李睿
审校 | 孙淑娟
.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类在系统中声明。集合命名空间如下所示:
在.NET 7中创建BitArray
可以创建一个特定大小的BitArray,并用所有错误值填充它,例如下面给出的代码段所示:
还可以传入一个布尔值列表,以创建特定大小的BitArray并设置值。
一旦创建了BitArray,就可以使用索引器访问和操作每个位。索引器期望一个整数并返回或设置该位的值。
下面的代码片段可用于创建BitArray,设置其元素的值,然后检索和显示BitArray中特定索引的值。
当执行上面的代码段时,值true和false将显示在控制台窗口中,如图1所示:
图1
在BitArray中操作位
可以使用BitArray的索引或使用BitArray类的Get和Set方法来操作BitArray中的位。要从BitArray中设置或检索多个位,可以使用SetAll()和GetAll()方法,如下面的代码片段所示:
检查BitArray是否只读
如果需要检查BitArray是否是只读的,可以使用IsReadOnly属性。这一属性返回一个布尔值,指示BitArray是否只读。下面的代码片段展示了如何检查BitArray是否是只读的。
当执行上述代码段时,文本“False”将显示在控制台窗口中。
BitArray中的Length和Count属性
BitArray的Length属性返回数组中的位数。Count属性返回BitArray中true和false值的计数。需要注意,Length属性总是返回数组中的总位数,即使所有位数都为假。换句话说,Length和Count属性将为BitArray显示相同的值。
下面的代码说明了如何获取BitArray的Length和Count。
当执行上述代码时,输出将类似于图2所示。
图2
可能需要检查BitArray实例是否同步。这可以通过调用实例的IsSynchronized属性来完成,如果BitArray已同步,该属性将返回true,否则返回false。
在BitArray中执行AND, OR和NOT操作
下面的代码清单显示了如何在两个BitArray实例上按位执行AND操作。位与运算如果两个操作数都为true,则返回true (或1),否则返回false。位OR操作如果其中一个或两个操作数都为true则返回true,否则返回false。
当执行上述代码时,bitArray1的每个元素的值将在AND操作之后显示出来。
图3
要在两个Bitarray上执行按位OR操作,只需将AND操作符替换为前面示例中的OR操作符。换句话说,用bitArray1.Or(bitArray2)替换bitArray1.And(bitArray2)。
对BitArray执行NOT操作会将所有true元素更改为false,反之亦然。下面的代码片段将把BitArray1的元素从{true, false, false, true, false}更改为{false, true, true, false, true}。
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