我想要一個IDictionary<float, foo>
,它首先返回鍵的大數值。C#.NET:SortedDictionary的降序比較?
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)
{
// ...
}
UPDATE:這工作,但速度太慢,因爲經常因爲我需要調用這個方法叫:
IOrderedEnumerable<KeyValuePair<float, foo>> sortedLayers = layers.OrderByDescending(kv => kv.Key);
foreach (KeyValuePair<float, ICollection<IGameObjectController>> kv in sortedLayers) {
// ...
}
更新:我在比較器中放置了一個斷點,從未從字典中添加和刪除kv對,從而無法擊中它。這意味着什麼?
我想y你在上升與下降混淆。上升爲1 2 3 4 5(最小值第一),下降爲5 4 3 2 1(最大值第一)。 – dtb 2010-04-23 22:41:49
@dtb你是對的。 – 2010-04-23 22:42:36
'y.CompareTo(x)'應該按降序工作。爲什麼不呢? :o如果你提供了很少的樣本和輸出,它會更容易知道。請參閱[反向排序字典在網絡](http://stackoverflow.com/questions/931891/reverse-sorted-dictionary-in-net) – nawfal 2014-06-15 10:28:56