Unity C#筆記 容器類

記錄一下Unity C#經常使用的容器,方便寫腳本時忘了容器類來查下 (- -||)數組

動態數組

List<T>

using System.Collections.Generic; //泛型容器的命名空間緩存

相似C++的vector<T>。安全

有另外一個很是類似的非泛型容器:ArrayList。ArrayList能夠插入不一樣的值類型,在數據檢索及存儲時存在裝箱與拆箱操做,容易帶來性能消耗。
而List<T>則能夠避免了裝箱與拆箱動做的性能耗費,並且類型更安全。性能

雙向鏈表

LinkedList<T>

using System.Collections.Generic; //泛型容器的命名空間code

相似C++的list<T>。對象

額外的,LinkedListNode<T> 是雙向鏈表的節點類型排序

隊列

Queue<T>

using System.Collections.Generic; //泛型容器的命名空間隊列

相似C++的queue<T>。內存

Queue<T>的底層是動態數組實現的隊列hash

Stack<T>

using System.Collections.Generic; //泛型容器的命名空間

相似C++的stack<T>。

Stack<T>的底層是動態數組實現的棧

查找二叉樹

SortedDictionary<K,V>

using System.Collections.Generic; //泛型容器的命名空間

相似C++的map<K,V>。

有另外一個也很是類似功能的SortedList<K,V>,可是它的實現不是二叉樹,而是每次插入都要排序的數組(真如其名),
因此插入刪除速度都是O(n),並且其用處比較少(例如要求O(1)速度找出第幾大),就不放出來了。

哈希表

HashSet<K> & Dictionary<K,V>

using System.Collections.Generic; //泛型容器的命名空間

相似C++的unorderd_set<K>和unorderd_map<K,V>。

額外的,KeyValuePair<K,V> 是鍵/值對結構,用於輔助Dictionary<K,V>結構。

位數組

BitArray

using System.Collections; //非泛型容器的命名空間

相似C++的bitset。

原生數組

NativeArray<T>

using Unity.Collections; //NativeArray<T>的命名空間

NativeArray<T>只能容納值對象。

在建立的時候除了指定length外,還須要指定allocator模式:Temp(臨時),TempJob(Job內臨時),Persistent(持久)

//示例,容量233,臨時內存
NativeArray<T> array = new NativeArray<T>(233,Allocator.Temp);

這是Unity官方提供的容器類,它所指定的allocator模式多是相似Temp對應棧內存分配,Persistent對應堆內存分配的方式。
它只是簡單的封裝一下數組,本質和普通的struct數組彷佛沒什麼區別,都能內存連續使cpu更容易命中緩存。
可是使用NativeArray能更增強調這是在使用值類型的數組,而非類對象數組。避免下面狀況出現:

//不能直接分辨ST是結構體仍是類
ST[] array = new ST[1024];
//錯把st看成類對象來修改,實際上這樣只是拷貝一份ST而後再對拷貝出來的進行修改
var st = array[0];
st.x = 0;
相關文章
相關標籤/搜索