Bonjour à tous,

J'ai un petit pépin !

J'ai actuellement un dictionnaire<int,ArrayList> et je voudrais trier les élements dans mon dictionnaire selon la première valeur de mon arrayList.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
            Dictionary<int, ArrayList2> dico = new Dictionary<int, ArrayList2>();
            dico.Add(2, new ArrayList { "1000", "ahah" });
            dico.Add(3, new ArrayList { "20000", "ahah" });
            dico.Add(1, new ArrayList { "2020", "ahah" });
Le tri devrait se retrouver selon l'ordre 2,1,3.

J'ai essayé avec la methode OrderBy

dico = dico.OrderBy(kvp => kvp.Value).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

Ça me dit qu'au moins un objet doit implémenter iComparable

Je ne suis pas certain de comprendre le problème.


J'ai donc regarder sur le web, je suis créer une classe ArrayList2 qui implemente ArrayList et iComparable et j'y ait redéfini CompareTo

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
 
    class ArrayList2 : ArrayList, IComparable
    {
        public  int CompareTo(Object o){
            if (o == null) return 1;
 
            ArrayList arr = o as ArrayList;
 
            if (arr != null)
            {
                return arr[0].ToString().CompareTo(arr[1].ToString());
            }
 
            return 0;
        }
La aussi ça semble foirer, car il compare avec les autres élements du même ArrayList et pas avec les autres ArrayList du dictionnaire.

Pourtant, si je veux trier par la valeur....

Code : Sélectionner tout - Visualiser dans une fenêtre à part
dico = dico.OrderBy(kvp => kvp.Key).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
Fonctionne #1 !

Auriez-vous une idée, une piste de solution ?

Merci