したがって、理想的には、 O(1)またはO(log n)の削除と挿入を持つデータ構造を使用する必要があります。ディクショナリ型のデータ構造は、一定の平均ケースの挿入および削除時間の複雑さのため、おそらく理想的です。ゲームオブジェクトの基本クラスをオーバーライドHashSet
してからオーバーライドすることをお勧めします。GetHashCode()
ここでは、さまざまなディクショナリ/ハッシュ テーブルのデータ構造について詳しく説明します。
時間の複雑さ
以下は、すべての「辞書のような」データ構造とその時間の複雑さです。
Type Find by key Remove Add
HashSet O(1)* O(1)* O(1)**
Dictionary O(1)* O(1)* O(1)**
SortedList O(log n) O(n) O(n)
SortedDictionary O(log n) O(log n) O(log n)
*
O(n) 衝突あり
**
O(n) 衝突あり、または配列の容量を超えて追加する場合。
ハッシュセットと辞書
HashSet
aと aの違いはDictionary
、Dictionary は a で機能するのKeyValuePair
に対し、aHashSet
ではキーはオブジェクト自体 (そのGetHashCode()
メソッド) であるということです。
SortedList と SortedDictionary の比較
注文を維持する必要がある場合にのみ、これらを考慮する必要があります。違いは、SortedDictionary
赤黒ツリーをSortedList
使用し、そのキーと値に並べ替えられた配列を使用することです。
参考文献