0

セット (重複値なし) であり、挿入時間を短縮できるコレクションが必要です。また、値のインデックスを取得できる必要があります。

擬似コード:

Set.Insert(value)
Set.GetIndex(value)

他の値に対する値の位置は関係なく、並べ替えは必要ありません。

この機能を提供する C# ジェネリック コレクションはありますか? または、異なるコレクションの種類を組み合わせてそれを行う方法はありますか?

4

3 に答える 3

1

使用できますHashSet<T> 重複を許可せず、高速です。 http://msdn.microsoft.com/en-us/library/bb359438.aspx
値のインデックスを取得する場合は、 をHashSet配列に変換してArray.IndexOf(value);を使用できます。ただし、HashSetでは値自体をインデックスとして使用できるため、その必要がなくなる可能性があります。

于 2013-04-02T20:38:04.950 に答える
0

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];
    }
}

もちろん、これで完全ではありませんが、アイデアはわかります。おそらく、エラー チェックをさらに追加する必要があります。

于 2013-04-02T20:58:09.513 に答える
0

なぜあなたがそうする必要があるのか​​ はわかりませんがid = search[key]、これが理想的であれば、ここに投げます...

OrderedDictionaryを試すことができます。

(検索に関して)理想的ではありませんが、内部的には、IndexOfKey必要なことだけを行うメソッドを保持しています。ArrayList基本的には、アイテムの配列を保持する +Dictionary<>高速アクセスなどのため に持っているに基づく実装です。

ソースは簡単に見つかります (ただし、明らかな理由からここではリンクしません)。それを使用することも、調整することもできます。

于 2013-04-02T20:45:51.623 に答える