ディクショナリ(キー、値)を作成したいのですが、このディクショナリのサイズを制限して、たとえば1000エントリにしたいので、この制限サイズを豊富に使用する場合は、最初の要素を削除して新しい要素(FIFO)を追加します。 。
私はいつも辞書でキーを検索しているので、辞書を使いたいです(高速である必要があります)
これを行う方法?
ディクショナリ(キー、値)を作成したいのですが、このディクショナリのサイズを制限して、たとえば1000エントリにしたいので、この制限サイズを豊富に使用する場合は、最初の要素を削除して新しい要素(FIFO)を追加します。 。
私はいつも辞書でキーを検索しているので、辞書を使いたいです(高速である必要があります)
これを行う方法?
辞書とLIFO/FIFOの動作(最新/最も古いエントリを削除するため)の両方を取得するには、を使用できますOrderedDictionary
。http://msdn.microsoft.com/en-us/library/system.collections.specialized.ordereddictionary.aspxを参照してください。
これを使いやすくするために、OrderedDictionary
@ ArsenMkrtによって提案された行に沿って、から独自のクラスを派生させることができます。
ただし、OrderedDictionary
ジェネリックスを使用していないため、ボクシングが原因で非効率になることに注意してください(辞書の項目はとして挿入されますobject
)。これを克服する唯一の方法は、ディクショナリ内のすべてのアイテムがQueue
(FIFOの場合)またはStack
(LIFOの場合)にミラーリングされたデュアルデータ構造を作成することです。詳細については、次のSO質問に対する「Qua」による回答を参照してください。これは、辞書アイテムが挿入された順序を追跡する効率的な方法が必要な状況を正確に扱っています。
辞書から派生し、このようなovverrideaddメソッド
if(myDic.Count == MAXCOUNT - 1)
{
myDic.Remove(myDic[0]);
}
myDic.Add(key, item);
辞書のサイズを明示的に制限できるかどうかはわかりません。いつか私は同じことをしたかった。
辞書の数を手動でチェックし続けるメソッドを1つ作成することで問題を解決しました。そのサイズが特定の制限を超えると、辞書から一部のエントリが削除されます。