セット (重複値なし) であり、挿入時間を短縮できるコレクションが必要です。また、値のインデックスを取得できる必要があります。
擬似コード:
Set.Insert(value)
Set.GetIndex(value)
他の値に対する値の位置は関係なく、並べ替えは必要ありません。
この機能を提供する C# ジェネリック コレクションはありますか? または、異なるコレクションの種類を組み合わせてそれを行う方法はありますか?
セット (重複値なし) であり、挿入時間を短縮できるコレクションが必要です。また、値のインデックスを取得できる必要があります。
擬似コード:
Set.Insert(value)
Set.GetIndex(value)
他の値に対する値の位置は関係なく、並べ替えは必要ありません。
この機能を提供する C# ジェネリック コレクションはありますか? または、異なるコレクションの種類を組み合わせてそれを行う方法はありますか?
使用できますHashSet<T>
重複を許可せず、高速です。 http://msdn.microsoft.com/en-us/library/bb359438.aspx
値のインデックスを取得する場合は、 をHashSet
配列に変換してArray.IndexOf(value)
;を使用できます。ただし、HashSet
では値自体をインデックスとして使用できるため、その必要がなくなる可能性があります。
2 つのディクショナリのラッパーを作成できます
class MySet<T> {
Dictionary<T,int> valToIndex;
Dictionary<int,T> indexToVal;
int curIndex;
Add(T newItem) {
curIndex++;
valToIndex.Add(newItem, curIndex);
indexToVal.Add(curIndex, newItem);
}
T this[int index] {
get {
return indexToVal[index];
}
}
GetIndexOf(T value) {
return valToIndex[value];
}
}
もちろん、これで完全ではありませんが、アイデアはわかります。おそらく、エラー チェックをさらに追加する必要があります。
なぜあなたがそうする必要があるのか はわかりませんがid = search[key]
、これが理想的であれば、ここに投げます...
OrderedDictionaryを試すことができます。
(検索に関して)理想的ではありませんが、内部的には、IndexOfKey
必要なことだけを行うメソッドを保持しています。ArrayList
基本的には、アイテムの配列を保持する +Dictionary<>
高速アクセスなどのため に持っているに基づく実装です。
ソースは簡単に見つかります (ただし、明らかな理由からここではリンクしません)。それを使用することも、調整することもできます。