linq: regrouper les données par clé avec GroupBy
et ToLookup
LINQ fournit des méthodes efficaces pour regrouper des données en fonction de critères spécifiques. Ceci est particulièrement utile pour traiter les collections d'objets et avoir besoin d'agréger les informations basées sur une clé commune.
illustrons avec une classe Person
:
class Person { public int PersonID { get; set; } public string Car { get; set; } }
Considérons une liste d'objets Person
, où certaines personnes peuvent avoir plusieurs entrées (par exemple, posséder plusieurs voitures):
List<Person> persons = new List<Person>() { new Person { PersonID = 1, Car = "Ferrari" }, new Person { PersonID = 1, Car = "BMW" }, new Person { PersonID = 2, Car = "Audi" } };
pour regrouper ces personnes par PersonID
et énumérer leurs voitures, nous utilisons la méthode de Linq GroupBy
:
var results = persons.GroupBy(p => p.PersonID, p => p.Car);
results
est un IEnumerable<IGrouping<int, string>>
. Chaque IGrouping
représente un groupe avec un PersonID
(accessible via result.Key
) et contient une séquence de chaînes de voiture (result
). Pour accéder à ces données:
foreach (var result in results) { int personID = result.Key; List<string> cars = result.ToList(); // Convert to List for easier access Console.WriteLine($"Person ID: {personID}, Cars: {string.Join(", ", cars)}"); }
Alternativement, ToLookup
crée une structure de type dictionnaire (ILookup<int, string>
):
var carsByPersonID = persons.ToLookup(p => p.PersonID, p => p.Car);
L'accès aux données est alors plus simple:
List<string> carsForPerson1 = carsByPersonID[1].ToList(); Console.WriteLine($"Cars for Person 1: {string.Join(", ", carsForPerson1)}");
à la fois GroupBy
et ToLookup
offrent des moyens efficaces de regrouper les données en fonction d'une clé, ce qui rend la manipulation de données dans LINQ plus rationalisée. ToLookup
fournit un accès direct de type dictionnaire, tandis que GroupBy
offre plus de flexibilité pour les scénarios de regroupement complexes.
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!