2

インデックスによってアクセスされる、sortedDictionary の要素の値を設定する必要があります。

いえ

sortedDictionary.Values[index] = value; // compile error

以下は、インデックスではなくキーによってアクセスされるため、正しくないことに注意してください。

sortedDictionary[index] = value; // incorrect

次の解決策を思いつきましたが、直感的には遅いことがわかります。キーによるアクセスは O(log N)、インデックスによるアクセスは O(1) と仮定していますが、確かではありません。

sortedDictionary[sortedDictionary.ElementAt(index).Key] = value;

背景:

高速な挿入、削除、検索が必要で、隣接する要素にアクセスできるようにするために、SortedDictionary を使用しています。(つまり、次に高い、または次に低い。) 効率は重要です。

4

1 に答える 1

2

それはちょっとしたトレードオフです。

SortedList を使用してインデックス検索を高速化できますが、挿入速度が犠牲になります。

MSDNを引用するには:

SortedDictionary<(Of <(TKey, TValue>)>)...とSortedList<(Of <(TKey, TValue>)>)クラス のもう 1 つの違い は、 SortedList<(Of <(TKey, TValue>)>) が Keys プロパティと Values プロパティによって返されるコレクションを通じて、キーと値の効率的なインデックス付き検索をサポートしていることです。リストはキーと値の内部配列の単なるラッパーであるため、プロパティにアクセスするときにリストを再生成する必要はありません。

両方ともSortedDictionary実装SortedListされIDictionaryているので、テスト データとコード プロファイラーを一緒に取得して、両方を試します。

Dictionaryどちらも十分に高速でない場合は、 (高速な挿入、更新、およびキー検索) を使用して、2 番目のデータ構造に手動でインデックスを維持することを検討する必要があるかもしれません。

于 2009-09-09T08:32:44.070 に答える