Maison >développement back-end >C++ >Comment LINQ peut-il regrouper les données et compter les occurrences de manière efficace ?

Comment LINQ peut-il regrouper les données et compter les occurrences de manière efficace ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-22 00:46:10647parcourir

How Can LINQ Group Data and Count Occurrences Efficiently?

Exploitez LINQ pour regrouper et compter efficacement les données

LINQ (Language Integrated Query) en C# fournit un moyen puissant de manipuler et d'interroger des données. Dans les situations où vous devez regrouper et compter des ensembles de données, LINQ fournit une solution concise et efficace.

Supposons que nous ayons un ensemble de données contenant les utilisateurs et leurs métriques et dates associées :

<code>UserInfo(姓名, 指标, 日期, 其他指标)

数据:
joe  1 2011/01/01 5
jane 0 2011/01/02 9
john 2 2011/01/03 0
jim  3 2011/01/04 1
jean 1 2011/01/05 3
jill 2 2011/01/06 5
jeb  0 2011/01/07 3
jenn 0 2011/01/08 7</code>

Notre objectif est d'obtenir un tableau, regroupé par ordre d'indicateur (0, 1, 2, 3...), et d'afficher le nombre total d'occurrences de chaque indicateur.

Regroupement et comptage à l'aide de LINQ

Pour y parvenir en utilisant LINQ, nous pouvons utiliser les méthodes 'GroupBy' et 'Select' :

<code>foreach(var line in data.GroupBy(info => info.metric)
                        .Select(group => new { 
                             Metric = group.Key, 
                             Count = group.Count() 
                        })
                        .OrderBy(x => x.Metric))
{
     Console.WriteLine("{0} {1}", line.Metric, line.Count);
}</code>

Instructions :

  1. La méthode 'GroupBy' est appliquée à l'ensemble de données, en regroupant selon l'attribut 'metric'. Cela produira une séquence de groupes, chaque groupe contenant des éléments avec la même valeur « métrique ».
  2. La méthode 'Select' permet de projeter chaque groupe dans un nouvel objet anonyme avec deux propriétés : 'Metric' (la clé du groupe) et 'Count' (le nombre d'éléments dans le groupe).
  3. La méthode 'OrderBy' trie les objets anonymes par ordre croissant, triés par 'Metric'.
  4. Le résultat est une séquence d'objets anonymes, chaque objet représentant une métrique et son décompte.

Sortie :

<code>0 3
1 2
2 2
3 1</code>

Une autre façon

Bien que la solution LINQ fournie soit efficace, elle pourrait être encore simplifiée :

<code>var result = data.GroupBy(info => info.metric)
                 .Select(group => new { 
                      Metric = group.Key, 
                      Count = group.Count() 
                 })
                 .OrderBy(x => x.Metric);</code>

La seule différence ici est qu'au lieu d'utiliser une boucle « foreach » pour parcourir les résultats, nous l'attribuons à une variable appelée « résultat ».

Points clés

  • GroupBy() crée une séquence de groupes.
  • Select() Projette un groupe sur un objet anonyme.
  • Count() renvoie le nombre d'éléments dans le groupe.
  • OrderBy() trie les résultats selon l'attribut spécifié.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn