Unity数组Array

命名空间

using System;

数组的概念

数组是一个存储相同类型元素的固定大小顺序集合。

定义数组

数据类型[] 变量名 = new 数据类型[数组长度];

//定义数组
int[] a = new int[3];
//定义并赋值
int[] b = new int[] { 1, 2, 3, 4 };
int[] c = { 1, 2, 3 };

取值赋值

使用数组的索引下标来进行取值赋值

//定义数组
int[] a = new int[3];
//根据索引下标进行赋值
a[0] = 1;
a[1] = 2;
a[2] = 3;

//定义并赋值
int[] b = { 1, 2, 3 };
int[] c = new int[] { 1, 2, 3 };

//这样是错误的
c = { 1, 2, 3 };//定义后无法这样赋值

//通过foreach遍历取值,但不可赋值
foreach (int ele in a)
{
    Debug.Log(ele);
    ele = 1;//这样是错误的
}

//通过for循环遍历取值,可以赋值
for (int i = 0; i < a.Length; i++)
{
    Debug.Log(a[i]);
    a[i] = i;
}

//通过while循环遍历取值,可以赋值
int m_index = 0;
while (m_index < a.Length)
{
    Debug.Log(a[m_index]);
    a[m_index] = 1;
}         

应该还有其他方式赋值,之后补充

属性

Length(长度): 返回数组的长度。

也就这一个常用,其他几个不怎么用,之后补充。

Array类静态方法

Copy(int[] array1, int[] array2, int length)

从array1的0索引元素开始,复制length个元素,然后从array2的0索引开始粘贴

Copy(int[] array1, int index1, int[] array2,int index2, int length)

从array1,index1索引元素开始,复制length个元素,然后从array2的index2索引开始粘贴

后面再补充

 

 

 

 

 

 

 

<think>好的,用户想了解Unity数组、列表和字典的用法和区别。首先,我需要回忆一下C#中的这些数据结构以及它们在Unity中的具体应用。根据用户提供的引用,特别是引用[1]提到的三个基本准则,应该围绕这些点展开。 首先,数组在C#中是固定大小的,内存连续,访问速度快。适合元素数量固定的情况。比如存储关卡固定的敌人位置。然后列表(List<T>)是动态数组,可以动态增减元素,适用于元素数量变化的情况,比如玩家背包中的物品。字典(Dictionary<TKey, TValue>)是基于键值对的,查找速度快,适合需要快速查找的场景,比如通过ID查找玩家信息。 接下来要结合用户提供的引用内容。引用[1]提到,当对象数目固定且需要密集搜索时不用列表,动态对象且搜索不优先用列表,快速访问用字典。引用[4]提到字典的键要不可变,否则可能引发问题。这些都需要在回答中强调。 然后需要考虑用户可能的实际应用场景,比如游戏开发中常见的例子。例如,数组用于固定长度的数据,列表用于动态集合,字典用于快速查找。同时要给出代码示例,如用户提供的引用[2]中提到的遍历数组、列表和字典的代码片段,可能需要用C#示例展示它们的初始化、添加元素和遍历方法。 还要注意Unity的特殊情况,比如引用[3]提到的Unity可能使用DynamicBuffer或其他特定容器,但用户的问题更基础,可能不需要深入这些高级内容,但可以简要提及。 需要区分三者的性能差异,数组访问最快,列表在中间,字典在查找上最快但内存开销大。同时,引用[4]提到的字典键不可变的问题,要提醒用户注意,比如不要用可能变化的对象作为键。 最后,生成相关问题时要围绕用户可能进一步的问题,比如性能比较、选择依据、常见错误等。确保回答结构清晰,先分别介绍数组、列表、字典的定义、示例和适用场景,再总结区别,最后给出建议。同时检查代码示例是否符合C#语法,特别是Unity中的常见用法,比如使用List需要引入System.Collections.Generic。</think>### Unity数组、列表和字典的用法与区别 #### 一、数组Array) **定义**: 数组是固定大小的连续内存容器,元素类型必须一致,通过索引直接访问,时间复杂度为$O(1)$。 **Unity示例**: ```csharp // 初始化数组 int[] enemyPositions = new int[3] {10, 20, 30}; // 遍历数组(引用[2]示例扩展) foreach (int pos in enemyPositions) { Debug.Log("敌人位置:" + pos); } ``` **适用场景**: - 对象数量固定(如关卡固定坐标点) - 需要高性能随机访问[^1] --- #### 二、列表(List<T>) **定义**: 列表是动态数组,支持自动扩容,提供添加/删除元素的方法,访问时间复杂度$O(1)$,插入/删除平均$O(n)$。 **Unity示例**: ```csharp using System.Collections.Generic; List<string> inventory = new List<string>(); inventory.Add("药水"); // 动态添加 inventory.RemoveAt(0); // 动态删除 // 遍历列表(引用[2]示例扩展) foreach (string item in inventory) { Debug.Log("背包物品:" + item); } ``` **适用场景**: - 对象数量动态变化(如玩家背包) - 需要频繁增删但较少搜索[^1] --- #### 三、字典(Dictionary<TKey, TValue>) **定义**: 基于哈希表的键值对集合,查找时间复杂度$O(1)$,但内存开销较大。 **Unity示例**: ```csharp using System.Collections.Generic; Dictionary<int, Player> playerDict = new Dictionary<int, Player>(); playerDict.Add(101, new Player("战士")); // 添加键值对 // 安全访问(引用[4]注意事项) if (playerDict.TryGetValue(101, out Player player)) { Debug.Log("找到玩家:" + player.Class); } ``` **适用场景**: - 需要快速通过唯一键查找(如玩家ID查询) - 键对象不可变(引用[4]关键要求) --- ### 三者的核心区别 | 特性 | 数组 | 列表 | 字典 | |------------|--------------------|--------------------|----------------------| | **内存分配** | 连续固定 | 动态扩容 | 哈希表结构 | | **访问速度** | $O(1)$ | $O(1)$ | $O(1)$ | | **增删效率** | 无法直接修改大小 | 尾部操作$O(1)$,中间$O(n)$ | 添加/删除$O(1)$ | | **典型用例** | 固定配置数据 | 动态集合管理 | 快速键值查找 | --- ### 选择建议(引用[1]准则) 1. **数组**:数据长度固定 + 高频访问 2. **列表**:数据动态变化 + 操作优先于搜索 3. **字典**:需要快速查找 + 键稳定性保证[^4] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mayikami

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值