# 【Unity数据结构】
# 数组(Array)
是一种能够存储固定大小的同类型元素序列的数据结构,可以通过索引访问元素。 以下是在Unity中使用Array的一个简单示例:
using UnityEngine;
public class ArrayExample : MonoBehaviour
{
// 声明一个整型数组,包含5个元素
int[] numbers = new int[5];
// 也可以new的同时加上初始数据
// int[] numbers = new int[]{1,3,5,7,9};
void Start()
{
// 通过索引设置数组中的元素值
numbers[0] = 1;
numbers[1] = 3;
numbers[2] = 5;
numbers[3] = 7;
numbers[4] = 9;
// 循环遍历数组并输出每个元素的值
for (int i = 0; i < numbers.Length; i++)
{
Debug.Log("Element " + i + " = " + numbers[i]);
}
}
}
# 列表(List)
是一种可变大小的同类型元素序列,提供了添加、删除、排序等操作。 在Unity中使用List的一个简单示例:
using System.Collections.Generic;
using UnityEngine;
public class ListExample : MonoBehaviour
{
// 声明一个整型列表
List<int> numbers = new List<int>();
void Start()
{
// 添加元素到列表中
numbers.Add(1);
numbers.Add(3);
numbers.Add(5);
numbers.Add(7);
numbers.Add(9);
// 循环遍历列表并输出每个元素的值
foreach (int num in numbers)
{
Debug.Log("Element = " + num);
}
// 通过索引访问列表中的元素
int firstElement = numbers[0];
int lastElement = numbers[numbers.Count - 1];
Debug.Log("First Element = " + firstElement);
Debug.Log("Last Element = " + lastElement);
// 删除列表中的元素
numbers.Remove(5);
numbers.RemoveAt(3);
// 排序列表中的元素
numbers.Sort();
// 循环遍历排序后的列表并输出每个元素的值
foreach (int num in numbers)
{
Debug.Log("Sorted Element = " + num);
}
}
}
在实际应用中,List通常用于动态存储数据,例如游戏中的角色列表、物品列表等。
# 队列(Queue)
是一种先进先出(FIFO)的数据结构,元素在队列尾部添加,从队列头部删除。 以下是一个简单的例子:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class QueueExample : MonoBehaviour
{
void Start()
{
Queue<string> queue = new Queue<string>();
queue.Enqueue("First");
queue.Enqueue("Second");
queue.Enqueue("Third");
Debug.Log("Queue count: " + queue.Count); // 输出队列元素数量
while (queue.Count > 0)
{
string item = queue.Dequeue(); // 获取队列首元素,并将其从队列中移除
Debug.Log("Queue item: " + item); // 输出队列元素
}
}
}
# 栈(Stack)
是一种后进先出(LIFO)的数据结构,元素在栈顶添加,从栈顶删除。 以下是一个使用Stack类的简单示例:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class StackExample : MonoBehaviour
{
void Start()
{
// 创建一个新的堆栈
Stack<string> myStack = new Stack<string>();
// 向堆栈中添加元素
myStack.Push("元素1");
myStack.Push("元素2");
myStack.Push("元素3");
// 查看堆栈顶部元素
string topElement = myStack.Peek();
Debug.Log("堆栈顶部元素是:" + topElement);
// 弹出堆栈顶部元素
string poppedElement = myStack.Pop();
Debug.Log("弹出的元素是:" + poppedElement);
// 再次查看堆栈顶部元素
topElement = myStack.Peek();
Debug.Log("堆栈顶部元素是:" + topElement);
}
}
# 字典(Dictionary)
是一种键值对的数据结构,通过键访问值,可以用来存储一些相关的信息。 下面是一个简单的示例:
using System.Collections.Generic;
using UnityEngine;
public class DictionaryExample : MonoBehaviour
{
private Dictionary<string, int> scoreDictionary;
void Start()
{
// 初始化Dictionary
scoreDictionary = new Dictionary<string, int>();
// 添加键值对
scoreDictionary.Add("Alice", 100);
scoreDictionary.Add("Bob", 85);
scoreDictionary.Add("Charlie", 92);
// 获取特定键的值
int aliceScore = scoreDictionary["Alice"];
Debug.Log("Alice's score is: " + aliceScore);
// 遍历Dictionary中的所有键值对
foreach (KeyValuePair<string, int> kvp in scoreDictionary)
{
Debug.Log("Key = " + kvp.Key + ", Value = " + kvp.Value);
}
// 检查是否包含指定的键
if (scoreDictionary.ContainsKey("Bob"))
{
Debug.Log("Bob is in the dictionary.");
}
// 移除指定的键值对
scoreDictionary.Remove("Charlie");
}
}
# 集合(HashSet)
是一种不允许重复元素的集合,提供了添加、删除、交集、并集等操作。 以下是一个示例:
using System.Collections.Generic;
public class MyScript : MonoBehaviour
{
HashSet<string> myHashSet = new HashSet<string>();
void Start()
{
// 添加元素到HashSet
myHashSet.Add("Apple");
myHashSet.Add("Banana");
myHashSet.Add("Orange");
// 遍历HashSet中的元素
foreach(string element in myHashSet)
{
Debug.Log(element);
}
// 检查HashSet中是否包含某个元素
if(myHashSet.Contains("Apple"))
{
Debug.Log("HashSet contains Apple.");
}
// 从HashSet中删除元素
myHashSet.Remove("Banana");
// 清空HashSet中的所有元素
myHashSet.Clear();
}
}
# 链表(LinkedList)
是一种通过链接相邻节点来表示数据的数据结构,可以用于实现队列和栈等数据结构。 下面是一个简单的示例代码:
using System.Collections.Generic;
public class Example : MonoBehaviour
{
void Start()
{
// 创建一个空的链表
LinkedList<int> myLinkedList = new LinkedList<int>();
// 向链表中添加元素
myLinkedList.AddFirst(3);
myLinkedList.AddLast(5);
myLinkedList.AddAfter(myLinkedList.First, 7);
// 遍历链表
foreach (int i in myLinkedList)
{
Debug.Log(i);
}
}
}