2011-09-15 2 views
1

J'essaie de refactoriser le code ci-dessous pour le framework 2.0 (requis au travail). Le code ci-dessous a été aimablement fourni par un previous post dans lequel j'essayais de comprendre comment trier un dictionnaire d'arraylists. C'est un peu une tangente de cette discussion. Voici le code:Implémentation d'IComparable à l'aide de Framework 2.0

MultiDimDictList myDicList = new MultiDimDictList(); 
myDicList.Add("fly", a_fly); 
myDicList.Add("img", a_img); 
myDicList.Add("bar", a_bar); 
myDicList.Add("meter", a_meter); 
myDicList.Add("block", a_block); 
myDicList.Add("popularity", a_pop); 

List<int> OrderedByPopularity = new List<int>(); 
ArrayList popList = myDicList["popularity"]; 

for (int i = 0; i < popList.Count; ++i) 
{ 
    OrderedByPopularity.Add(i); 
} 

OrderedByPopularity.Sort((i1, i2) => 
{ 

    return popList[i2].CompareTo(popList[i1]); 

}); 

Lorsque je tente d'exécuter le code ci-dessus, le fond le plus logique me donne des problèmes - à savoir, non reconnu « CompareTo ». J'ai fait quelques lectures à ce sujet et il semble que je doive implémenter IComparable pour que cela fonctionne, mais je pourrais utiliser de l'aide/des suggestions ici. Où devrais-je implémenter IComparable? De plus, le compilateur me dit aussi d'utiliser "delegate" pour ma méthode .Sort. Ai-je raison qu'il devrait ressembler à: .Sort (délégué (int i1, i2 int) =>

Merci pour votre aide

Répondre

0

IComparable est une interface qui vous implémentez sur une classe que vous voulez être en mesure d'être La méthode Sort sait comment travailler avec l'interface IComparable dès le départ, donc si vous voulez trier en utilisant la méthode Sort, votre classe doit implémenter IComparable Sinon, lorsque vous appelez CompareTo sur votre classe, comment voulez-vous que l'algorithme de tri sache comment votre classe trie logiquement? C'est un peu le contexte sur la façon dont IComparable fonctionne, mais il ne semble pas que ce soit le problème ici, sauf si je suis mal lu. Il semble que vous essayez de:

  1. Remplissez OrderedByPopularity avec un groupe d'entiers.
  2. Trier les entiers.

Si vous voulez vraiment trier les entiers dans votre liste, vous devez simplement avoir besoin d'utiliser

(i1, i2) => 
{ 
    return i1.CompareTo(i2); 
} 

la int (ce qui est le type d'élément dans le List) a déjà CompareTo dessus.

Est-ce que cela répond à la question?

0

problème est que ArrayList renvoi de l'objet Object ne met pas en œuvre IComparable

?...

Alors, quand vous dites Poplist [i2] .CompareTo (bla) que vous appelez une fonction sur l'objet qui n'existe pas.