Je veux un IDictionary<float, foo>
qui retourne les grandes valeurs de la clé en premier.C# .NET: Comparaison décroissante d'un 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);
}
}
Cependant, ceci renvoie des valeurs dans l'ordre du plus petit premier. J'ai l'impression de faire une erreur stupide ici.
Juste pour voir ce qui se passerait, je l'ai enlevé le signe -
du comparateur:
public int Compare(T x, T y)
{
return y.CompareTo(x);
}
Mais j'ai eu le même résultat. Cela renforce mon intuition que je fais une erreur stupide.
C'est le code qui accède au dictionnaire:
foreach (KeyValuePair<float, foo> kv in sortedLayers)
{
// ...
}
MISE À JOUR: Cela fonctionne, mais il est trop lent à appeler aussi souvent que je dois appeler cette méthode:
IOrderedEnumerable<KeyValuePair<float, foo>> sortedLayers = layers.OrderByDescending(kv => kv.Key);
foreach (KeyValuePair<float, ICollection<IGameObjectController>> kv in sortedLayers) {
// ...
}
MISE À JOUR: Je mets un point de rupture dans le comparateur qui ne sera jamais atteint car j'ajoute et retire des paires de kv du dictionnaire. Qu'est-ce que cela pourrait signifier?
Je pense que oui Vous confondez ascendant avec descendant. L'ascendant est 1 2 3 4 5 (la plus petite valeur en premier), la descente est 5 4 3 2 1 (la plus grande valeur en premier). – dtb
@dtb vous avez raison. –
'y.CompareTo (x)' devrait fonctionner par ordre décroissant. Pourquoi pas? : o Si vous donnez peu d'échantillons et de sortie, il sera plus facile à connaître. Voir [reverse-tried-dictionary-in-net] (http://stackoverflow.com/questions/931891/reverse-sorted-dictionary-in-net) – nawfal