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.
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
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....
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
Partager