我想要一个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 对时,该断点永远不会被击中。这意味着什么?