【Unity3D数据集合】(一)数组集合Array学习

分类栏目:unity3d教程

59

一、前言

在日常开发中,常常会用到数据集合,那么数据集合是什么呢,数据集合也没有想象中那么复杂。
数据集合就是专门用来存储数据、检索数据,以及对数据一系列操作的类。
这些类有: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学习

二、数组集合介绍

数组是一种数据结构,可以包含同一个类型的多个元素数据。
一个变量只能存放一个值,如果要计算10个变量的最大值,就很麻烦,需要定义10个变量。
所以,就引入了数组的概念,可以存放多个相同类型的值,然后根据数据在数组中的下标位置,就可以读取到数组中的想要找到的数据的值。
同一个数组中存放的值是同一数据类型,可以通过循环或者数据操作的方式对值进行运算或操作。
所有的数组都是由连续的内存位置存放的,最低的地址对应第一个元素,最高的地址对应最后一个元素。
C#中数组从零开始索引,即数组索引从零开始。

三、数组数据初始化

声明数组
在初始化数组之前,我们先说一下声明数组。
在C#中声明数组,需要在类型后面加上方括号[],后面是一个变量名,也就是这样:
int[] table;
1
放在类型前面,或者标识符后面都是不合法的语法。
下面就介绍如何初始化数组。
数组初始化
声明了数组后,需要初始化数组,然后为数组分配内存,以此才能对数据进行操作。
数组是引用类型,在堆上分配内存,所以需要使用new关键词,后面加上数组的类型和数量来初始化数组的变量。
初始化数组,需要提前设置数组的大小,设置完大小后,数组的长度不能再修改。
初始化数组,通常有4个形式:
1、只声明数组和初始化数组,数组里面的值都为空Null(数字类型的数组默认值为0)
using UnityEngine;

public class Demo5 : MonoBehaviour
{
    int[] table;
    void Start()
    {
        table = new int[4];

        for (int i = 0; i < table.Length; i++)
        {
            Debug.Log(table[i]);
        }
    }
}

2、 使用数组初始化器为每个数组元素赋值
using UnityEngine;

public class Demo5 : MonoBehaviour
{
    int[] table;
    void Start()
    {
        table = new int[4] { 1, 2, 3, 4 };

        for (int i = 0; i < table.Length; i++)
        {
            Debug.Log(table[i]);
        }
    }
}


3、使用花括号初始化数组,可以不指定数组的大小,因为编译器会自动计算元素的个数:
using UnityEngine;

public class Demo5 : MonoBehaviour
{
    int[] table;
    void Start()
    {
        table = new int[] { 1, 2, 3, 4 };

        for (int i = 0; i < table.Length; i++)
        {
            Debug.Log(table[i]);
        }
    }
}

4、省略new关键字,直接进行元素赋值:
using UnityEngine;

public class Demo5 : MonoBehaviour
{
    void Start()
    {
        int[] table = { 1, 3, 5, 7 };

        for (int i = 0; i < table.Length; i++)
        {
            Debug.Log(table[i]);
        }
    }
}

二维数组初始化
当然,这是一维数组,那么二维数组怎么初始化呢:
using UnityEngine;

public class Demo5 : MonoBehaviour
{
    int[,] table;
    void Start()
    {
        table = new int[5, 2] { { 1, 1 }, { 1, 2 }, { 1, 3 }, { 1, 4 }, { 1, 5 } };

        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 2; j++)
            {
                Debug.Log(table[i, j]);
            }
        }
    }
}


同理,也可以不指定二维数组的个数:
using UnityEngine;
public class Demo5 : MonoBehaviour
{
    int[,] table;
    void Start()
    {
        table = new int[, ] { { 1, 1 }, { 1, 2 }, { 1, 3 }, { 1, 4 }, { 1, 5 } };
        for (int i = 0; i < table.GetLength(0); i++)
        {
            for (int j = 0; j < table.GetLength(1); j++)
            {
                Debug.Log(table[i, j]);
            }
        }
    }
}

四、数组数据的增删改查

查找数据
访问数据,可以使用下标进行访问:
using UnityEngine;

public class Demo5 : MonoBehaviour
{
    int[] table;
    void Start()
    {
        table = new int[] { 1, 2, 3, 4 };

        Debug.Log(table[2]);
    }
}

查找数据,就需要在循环中进行查找了,比如找到数组所有大于1的元素:
using UnityEngine;
public class Demo5 : MonoBehaviour
{
    int[] table;
    void Start()
    {
        table = new int[] { 1, 2, 3, 4 };
        for (int i = 0; i < table.Length; i++)
        {
            if (table[i] > 1)
            {
                Debug.Log(table[i]);
            }
        }
    }
}


修改数据
可以直接通过下标进行数据修改:
using UnityEngine;
public class Demo5 : MonoBehaviour
{
    int[] table;
    void Start()
    {
        table = new int[] { 1, 2, 3, 4 };
        table[2] = 10;
    }
}
也可以在循环中,找到对应的数据进行修改:
using UnityEngine;
public class Demo5 : MonoBehaviour
{
    int[] table;
    void Start()
    {
        table = new int[] { 1, 2, 3, 4 };
        for (int i = 0; i < table.Length; i++)
        {
            if (table[i] > 1)//找到数组中数据大于1的元素
            {
                table[i] += 1;//让数据元素加1
                Debug.Log(table[i]);
            }
        }
    }
}
增加数据
因为数组的长度是固定的,所以不能增加元素
删除数据
因为数组的长度是固定的,所以不能删除元素

五、数组集合的常见函数

拷贝数组
将table里面的元素数据,拷贝给table2:
using UnityEngine;
public class Demo5 : MonoBehaviour
{
    int[] table;
    int[] table2;
    void Start()
    {
        table = new int[] { 1, 2, 3, 4 };
        table2 = new int[table.Length];
        table.CopyTo(table2, 0);
        for (int i = 0; i < table.Length; i++)
        {
            Debug.Log(table2[i]);
        }
    }
}

六、数组集合的优缺点

优点
可以索引坐标访问 读取快
缺点
增删慢,长度不变