あなたは(あなたの要件に応じて、またはSortedDictionary
)定期Dictionary
を使用することにより大幅にこの問題の複雑さを軽減し、キーを追跡するために、二次List
を保つことができます挿入順序。あなたも、この組織を容易にするためのクラスを使用することができます。
public class DictionaryList<TKey, TValue>
{
private Dictionary<TKey, TValue> _dict;
private List<TKey> _list;
public TValue this[TKey key]
{
get { return _dict[key]; }
set { _dict[key] = value; }
}
public DictionaryList()
{
_dict = new Dictionary<TKey, TValue>();
_list = new List<TKey>();
}
public void Add(TKey key, TValue value)
{
_dict.Add(key, value);
_list.Add(key);
}
public IEnumerable<TValue> GetValuesReverse()
{
for (int i = _list.Count - 1; i >= 0; i--)
yield return _dict[_list[i]];
}
}
(そしてもちろんのは、あなたが同様に必要とする他のどんな方法で追加してください。)
あなたが逆のか、通常の順序でそれを繰り返す場合ドキュメンテーションはSortedDictionary <処理鍵、TValue>クラスの要素とは異なり、OrderedDictionaryの要素がキーでソートされていない*、と述べているので、それは問題ではありません。 。* –
挿入順が私がOrderDictionaryを使用している理由です。それに応じて逆順に反復処理する必要があります。 –
辞書のkeysプロパティを使用して、常に反復処理を行うことができます。 – jdweng