Unity C#笔记 容器类

记录一下Unity C#常用的容器,方便写脚本时忘了容器类 (- -||)

首先,命名空间:

using System.Collections.Generic; //泛型容器的命名空间
using System.Collections;         //非泛型容器的命名空间
using Unity.Collections;          //NativeArray<T>的命名空间

动态数组 List<T>

  • 类似C++的vector<T>

有另一个非常相似的非泛型容器:ArrayList。ArrayList可以插入不同的值类型,在数据检索及存储时存在装箱与拆箱操作,容易带来性能消耗。
而List<T>则可以避免了装箱与拆箱动作的性能耗费,而且类型更安全。

双向链表 LinkedList<T>

  • 类似C++的list<T>

额外的,LinkedListNode<T> 是双向链表的节点类型

队列 Queue<T>

  • 类似C++的queue<T>

Queue<T>的底层是动态数组实现的队列

栈 Stack<T>

  • 类似C++的stack<T>

Stack<T>的底层是动态数组实现的栈

查找二叉树 SortedDictionary<K,V>

  • 类似C++的map<K,V>

有另一个也非常相似功能的SortedList<K,V>,但是它的实现不是二叉树,而是每次插入都要排序的数组(真如其名),
所以插入删除速度都是O(n),而且其用处比较少(例如要求O(1)速度找出第几大),就不放出来了。

哈希表 HashSet<K> & Dictionary<K,V>

  • 类似C++的unorderd_set<K>和unorderd_map<K,V>

额外的,KeyValuePair<K,V> 是键/值对结构,用于辅助Dictionary<K,V>结构。

位数组 BitArray

  • 类似C++的bitset

原生数组 NativeArray<T>

NativeArray只能容纳值对象。

而且在创建的时候除了指定length外,还需要指定allocator模式:

  • Temp(临时)
  • TempJob(Job内临时)
  • Persistent(持久)
\\示例:容量233,临时内存
NativeArray<T> array = new NativeArray<T>(233,Allocator.Temp);

它本质和普通的struct数组似乎没什么区别,可能只是简单的封装一下数组,减少GC。

而且由于它的实现是隐藏的,Unity官方文档说用它性能准不差。
所以只能推测,它所指定的allocator模式可能是类似Temp对应栈内存分配,Persistent对应堆内存分配的方式来加快访问速度。

猜你喜欢

转载自www.cnblogs.com/KillerAery/p/10586659.html