키의 가장 큰 값을 먼저 반환하는 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 ou는 내림차순으로 오름차순으로 혼란 스럽습니다. 오름차순은 1 2 3 4 5 (가장 작은 값부터), 내림차순은 5 4 3 2 1 (가장 큰 값부터)입니다. – dtb
@ dtb 당신이 틀립니다. –
'y.CompareTo (x)'는 내림차순으로 작동해야합니다. 왜 그렇지 않을까요? : o 샘플을 조금주고 출력하면 알기가 더 쉬울 것입니다. [역순 정렬 사전 인터넷] (http://stackoverflow.com/questions/931891/reverse-sorted-dictionary-in-net) – nawfal