0
votes

Comment puis-je trouver les n éléments les plus courants?

J'ai un tableau:

var popularFuits = myFruits.GroupBy(f => f).OrderByDescending(f => f.Count).Take(3);


5 commentaires

OrderByDescendant ?


@stuartd oups. Belle prise. Merci! Mais ce n'est pas la partie où je me débats. C'est la logique LINQ. L'exemple ci-dessus ne compile même pas. Je vais réellement éditer ce correctif afin que cela ne soit pas dans la voie de la racine de ma question.


Je pense que c'est ce que vous recherchez: Retour MAX RÉPÉDUÉ DE LA LISTE .


@Christian qui est similaire, mais pas tout à fait. Hazzik a sauvé ma journée cependant!


Aucune inquiétude, je voulais juste aider. Heureux que vous avez résolu votre problème.


3 Réponses :


4
votes

Votre requête est presque là.

  1. igrouping n'a pas .count , vous devez donc utiliser .Count () méthode d'extension
  2. Vous devez sélectionner le .Key du groupe.
    xxx

2 commentaires

Merci!! C'est exactement ce que j'essayais de faire. Quel est le .key? Cela sera-t-il toujours toujours égal à une valeur distincte dans le groupement?


@Evorlor ,.Key est la chose que vous avez des éléments de groupe par - dans votre cas la valeur des éléments.



2
votes

Ce qui suit vous donnera des fruits triés par la popularité, puis par ordre alphabétique si elles sont également populaires xxx

sortie

cerise - 3
banane - 2
kiwi - 2


2 commentaires

GroupBy a une surcharge qui permet de transformer le groupe. .groupby (f => f, (clé, éléments) => nouvelle {nom = clé, compte = éléments.count ()})


@hazzik merci ... un peu plus succinct. Mais probablement plus difficile à comprendre pour un débutant.



0
votes

Démo sur Dotnet Fiddle

Vous pouvez groupby puis EckbyDescendant le nombre d'éléments dans un groupe comme ci-dessous. xxx

sortie xxx


2 commentaires

Qu'est-ce qui rend votre réponse différente de celle fournie par @hazzik?


Juste la même idée (je n'ai pas lu les autres réponses), différente de explication et donnez l'exemple avec le résultat correspondant. Codage heureux.