Maison > développement back-end > C++ > Comment LINQ peut-il simplifier le pivotement et la restructuration des données ?

Comment LINQ peut-il simplifier le pivotement et la restructuration des données ?

Mary-Kate Olsen
Libérer: 2025-01-05 15:33:40
original
266 Les gens l'ont consulté

How Can LINQ Simplify Data Pivoting and Restructuring?

Pivoter les données avec LINQ

Dans certains scénarios, la restructuration des données dans un format différent devient nécessaire. Une tâche courante consiste à faire pivoter les données, en les transformant d'une structure tabulaire en une présentation plus condensée. Bien que les approches itératives traditionnelles telles que les boucles foreach puissent y parvenir, elles introduisent des défis liés aux modifications de collection au cours de l'itération. Entrez LINQ, un langage de requête puissant qui simplifie la manipulation des données, offrant une solution plus propre et plus efficace pour faire pivoter les données.

Considérez une collection d'objets contenant une énumération (TypeCode) et une instance utilisateur. L'objectif est d'aplatir cette collection dans une structure de type grille, où chaque TypeCode correspond à une colonne et les noms d'utilisateur sont disposés en lignes.

LINQ fournit un moyen simple de réaliser cette opération de pivot. En regroupant la collection par TypeCode, puis en sélectionnant les noms d'utilisateurs sous forme de tableau pour chaque groupe, nous pouvons créer efficacement des colonnes. L'extrait de code suivant illustre cette approche :

// Sample data
var data = new[] {
    new { TypeCode = 1, User = "Don Smith" },
    new { TypeCode = 1, User = "Mike Jones" },
    new { TypeCode = 1, User = "James Ray" },
    new { TypeCode = 2, User = "Tom Rizzo" },
    new { TypeCode = 2, User = "Alex Homes" },
    new { TypeCode = 3, User = "Andy Bates" }
};

// Group by TypeCode and select User name arrays
var groups = from d in data
              group d by d.TypeCode
              into grp
              select new {
                  TypeCode = grp.Key,
                  Users = grp.Select(d2 => d2.User).ToArray()
              };
Copier après la connexion

Après avoir créé les colonnes, nous devons déterminer le nombre total de lignes, qui correspond à la longueur maximale de tout tableau utilisateur dans les groupes. Avec ces informations, nous pouvons parcourir chaque groupe et afficher les noms d'utilisateur correspondants, en complétant avec des valeurs nulles si nécessaire.

// Find total number of rows
int rows = groups.Max(grp => grp.Users.Length);

// Output columns
foreach (var grp in groups) {
    Console.Write(grp.TypeCode + "\t");
}
Console.WriteLine();

// Output rows
for (int i = 0; i < rows; i++) {
    foreach (var grp in groups) {
        Console.Write((i < grp.Users.Length ? grp.Users[i] : null) + "\t");
    }
    Console.WriteLine();
}
Copier après la connexion

En tirant parti des capacités de regroupement et de sélection de LINQ, ce code nous permet de faire pivoter le données et générer le résultat souhaité de manière concise et efficace.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal