Я хочу IDictionary<float, foo>
, который сначала возвращает значения ключа ключа.
private IDictionary<float, foo> layers = new SortedDictionary<float, foo>(new DescendingComparer<float>());
class DescendingComparer<T> : IComparer<T> where T : IComparable<T>
{
public int Compare(T x, T y)
{
return -y.CompareTo(x);
}
}
Однако, это возвращает значения в порядке наименьшего первого. Я чувствую, что совершаю глупую ошибку здесь.
Чтобы посмотреть, что произойдет, я удалил знак -
из компаратора:
public int Compare(T x, T y)
{
return y.CompareTo(x);
}
Но я получил тот же результат. Это укрепляет мою интуицию, что я делаю глупую ошибку.
Это код, который обращается к словарю:
foreach (KeyValuePair<float, foo> kv in sortedLayers)
{
// ...
}
ОБНОВЛЕНИЕ: Это работает, но слишком медленно, чтобы вызывать так часто, как мне нужно вызвать этот метод:
IOrderedEnumerable<KeyValuePair<float, foo>> sortedLayers = layers.OrderByDescending(kv => kv.Key);
foreach (KeyValuePair<float, ICollection<IGameObjectController>> kv in sortedLayers) {
// ...
}
ОБНОВЛЕНИЕ: Я установил точку останова в компараторе, которая никогда не попадет, когда я добавляю и удаляю пары kv из словаря. Что бы это могло значить?