推荐阅读

大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

一、前言

在日常开发中,常常会用到数据集合,那么数据集合是什么呢,数据集合也没有想象中那么复杂。

数据集合就是专门用来存储数据、检索数据,以及对数据一系列操作的类。

这些类有:ArrayList数组、List列表、Queue队列、Dictionary字典、Hashtable哈希表、Stack堆栈。

在开发中,每种数据集合都有优缺点,今天就将这些数据集合进行归纳总结。

一是方便自己捋顺思路,二是可以帮助到对此理解不清晰的开发者。

这是本系列文章的第八篇:

【Unity3D数据集合】(一)数组集合Array学习
【Unity3D数据集合】(二)列表集合List及ListArray学习
【Unity3D数据集合】(三)字典Dictionary和哈希表Hashtable学习
【Unity3D数据集合】(四)堆栈Stack和队列Queue学习
【Unity3D数据集合】(五)链表LinkedList数据集合学习
【Unity3D数据集合】(六)散列集合HashSet和排序集合SortedSet学习
【Unity3D数据集合】(七)排序列表SortedList和排序字典SortedDictionary学习
【Unity3D数据集合】(八)点阵列BitArray学习

二、点阵列BitArray介绍

BitArray 类管理一个紧凑型的位值数组,它使用布尔值来表示,其中 true 表示位是开启的(1),false 表示位是关闭的(0)。

当您需要存储位,但是事先不知道位数时,则使用点阵列。您可以使用整型索引从点阵列集合中访问各项,索引从零开始。

三、点阵列BitArray方法和属性

下表列出了 BitArray 类的一些常用的 属性:

属性 描述
Count 获取 BitArray 中包含的元素个数。
IsReadOnly 获取一个值,表示 BitArray 是否只读。
Item 获取或设置 BitArray 中指定位置的位的值。
Length 获取或设置 BitArray 中的元素个数。

下表列出了 BitArray 类的一些常用的 方法:

序号 方法名 & 描述
1 public BitArray And( BitArray value );
对当前的 BitArray 中的元素和指定的 BitArray 中的相对应的元素执行按位与操作。
2 public bool Get( int index );
获取 BitArray 中指定位置的位的值。
3 public BitArray Not();
把当前的 BitArray 中的位值反转,以便设置为 true 的元素变为 false,设置为 false 的元素变为 true。
4 public BitArray Or( BitArray value );
对当前的 BitArray 中的元素和指定的 BitArray 中的相对应的元素执行按位或操作。
5 public void Set( int index, bool value );
把 BitArray 中指定位置的位设置为指定的值。
6 public void SetAll( bool value );
把 BitArray 中的所有位设置为指定的值。
7 public BitArray Xor( BitArray value );
对当前的 BitArray 中的元素和指定的 BitArray 中的相对应的元素执行按位异或操作。

四、点阵列BitArray实例

下面的实例演示了点阵列(BitArray)的使用:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Demo5 : MonoBehaviour
{
    void Start()
    {
        // 创建两个大小为 8 的点阵列
        BitArray ba1 = new BitArray(8);
        BitArray ba2 = new BitArray(8);
        byte[] a = { 60 };
        byte[] b = { 13 };

        // 把值 60 和 13 存储到点阵列中
        ba1 = new BitArray(a);
        ba2 = new BitArray(b);

        // ba1 的内容
        Debug.Log("位数组ba1");
        for (int i = 0; i < ba1.Count; i++)
        {
            Debug.Log(ba1[i]);
        }

        // ba2 的内容
        Debug.Log("位数组ba2");
        for (int i = 0; i < ba2.Count; i++)
        {
            Debug.Log(ba2[i]);
        }


        BitArray ba3 = new BitArray(8);
        ba3 = ba1.And(ba2);

        // ba3 的内容
        Debug.Log("与运算后的位数组ba3");
        for (int i = 0; i < ba3.Count; i++)
        {
            Debug.Log(ba3[i]);
        }

        ba3 = ba1.Or(ba2);
        // ba3 的内容
        Debug.Log("或运算后的位数组ba4");
        for (int i = 0; i < ba3.Count; i++)
        {
            Debug.Log(ba3[i]);
        }
    }
}

当上面的代码被编译和执行时,它会产生下列结果:

【Unity3D数据集合】(八)点阵列BitArray学习_BitArray