2009-08-24 4 views
-1

il ya un mois j'ai posé cette question: Trying to find the top 3 properties of a POCO instance. J'ai une réponse, ça a bien marché.Essayer de trouver les 3 principales propriétés d'une instance POCO, Partie 2

Maintenant, j'essaie de trouver les 3 premières propriétés d'un objet POCO (comme ma question précédente) mais où chaque propriété a un POIDS. La valeur de la propriété vient en premier. Le poids vient ensuite en deuxième ... si deux ou plusieurs propriétés ont la même valeur.

permet d'étendre les données de ma question précédente comme point de départ pour un exemple: -

Plus le nombre de poids le mieux. 1 == meilleur. 10 est le pire. Chaque numéro de poids est UNIQUE btw. Le nombre de poids peut être quelque chose ... j'ai juste besoin d'une certaine façon poids em ....

eg. 
Math (weight: 1) - 83% 
Engrish (weight: 6) - 82% 
Chemistry (weight: 2) - 81% 
Drama (Weight: 3) - 100% 
Geography (weight: 4) - 82% 
Sport (Weight: 5)- 81% 
etc.. 

Top 3 résultats, dans l'ordre, sont:

  • Drame
  • Math
  • Géographie (non ENGRISH. Géographie W = 4, Engrish W = 6)

Je me demande si cela peut être un chieved avec Linq (comme ma précédente question/réponse). Je suis content d'un dictionnaire, etc. Je devine aussi que je devrais surcharger la méthode Comparer?

Vive toute aide :)

Répondre

1

Uhm. Basé sur votre réponse précédente, et fait de mon esprit. (c.-à-d. non testé)

var result = (from p in pairs 
       orderby p.Value descending, p.Weight 
       select p); 

var result = pairs.OrderByDescending(p => p.Value) 
        .ThenBy(p => p.Weight); 
+0

ThenBy .. WTF ?! En aucune façon!!!!!! * Cela * existe ?! Je lovin 'linq de plus en plus (si c'était possible). brb .... –

+0

Squirt BANG !!!!!!!!!!!!!!! Winnah. C'est tellement génial. merci tas mate, ça a fait ma semaine! (j'aime Linq et SO). –

0

Utilisez la même réponse que précédemment, mais lors de la commande de multiplier la valeur par le poids.

+0

Multipliez la valeur par le poids? Cela ne sonne pas bien ... J'essaie de penser que si j'ai 100% avec une valeur de 1 et 99% avec une valeur de 6, alors les 99% seront listés en premier, ce qui n'est pas le cas. t bien. –

Questions connexes