Comprendre la liste C#
La classe List en C#, qui est un type de collection polyvalent. Il est basé sur un tableau dynamique comme structure de données interne, ce qui permet une manipulation efficace des éléments. Lorsque vous créez une liste, vous pouvez spécifier une capacité initiale par défaut afin d'optimiser l'utilisation de la mémoire dès le départ. Cette capacité est le nombre d'éléments que la liste peut initialement contenir sans réaffectation de mémoire.
Dans la vidéo de Layla Porter "C# for Beginners Part 7 - Querying Data with LINQ", elle plonge dans les fonctionnalités des listes C#, démontrant comment tirer parti de LINQ (Language Integrated Query) pour interroger les données de manière efficace. Cet article décompose les concepts et exemples clés de la vidéo de Layla, offrant une compréhension complète des listes C# pour les débutants.
Introduction aux listes en C
Comme le mentionne Layla au début de sa vidéo (0:03), une liste C# est une structure de données polyvalente qui permet aux développeurs de stocker et de manipuler une collection d'éléments. Contrairement aux tableaux, les listes peuvent être redimensionnées dynamiquement, ce qui les rend idéales pour les scénarios dans lesquels le nombre d'éléments n'est pas connu à l'avance.
L'utilisation d'une liste est simple. Vous pouvez ajouter des éléments à la liste à l'aide de la méthode Add, qui ajoute l'objet spécifié à la fin de la liste. La liste utilise un index basé sur le zéro, ce qui signifie que le premier élément est accessible à l'index 0. Vous pouvez également accéder aux éléments par un index spécifique en utilisant la notation des crochets ([]).
Pour parcourir la liste, vous pouvez utiliser une boucle foreach, qui parcourt chaque élément dans l'ordre où il apparaît. Si vous devez trouver la première occurrence d'un élément spécifique, vous pouvez utiliser des méthodes comme IndexOf avec un prédicat, qui effectue la recherche en fonction d'une condition spécifiée.
La liste est fortement typée, ce qui signifie qu'elle contient des objets d'un type spécifique (T). Cela garantit la sécurité des types et permet d'utiliser les méthodes et les propriétés définies par le type d'objet spécifié. Par défaut, List utilise une fonction de hachage pour organiser les éléments de manière efficace.
Examinons en détail le fonctionnement des méthodes des classes List et List, comme le montre Layla dans sa vidéo.
Création d'une liste
Lors de la création d'une liste en C#, vous pouvez définir une capacité initiale spécifiée afin d'optimiser la structure de données interne. Les listes sont polyvalentes et peuvent être initialisées à partir d'une collection spécifique d'éléments. Vous pouvez accéder aux éléments à l'aide d'un index int et les parcourir à l'aide d'une boucle foreach. Contrairement aux dictionnaires, les listes ne s'appuient pas sur une fonction de hachage par défaut et elles stockent des objets fortement typés, ce qui garantit la sécurité des types et la cohérence de la gestion des données.
À (0:44), Layla crée une liste de fromages, illustrant ainsi la manière d'initialiser et de remplir une liste. En C#, une liste peut être créée à l'aide de la classe List, où T représente le type d'éléments contenus dans la liste.
List<Cheese> cheeseList = new List<Cheese>
{
new Cheese(1, "Stilton", 3.0m, 5),
new Cheese(2, "Cheddar", 2.25m, 3),
new Cheese(3, "Pineapple", 3.5m, 1),
new Cheese(4, "Brie", 5.5m, 2),
new Cheese(5, "Roquefort", 3.5m, 5),
};
List<Cheese> cheeseList = new List<Cheese>
{
new Cheese(1, "Stilton", 3.0m, 5),
new Cheese(2, "Cheddar", 2.25m, 3),
new Cheese(3, "Pineapple", 3.5m, 1),
new Cheese(4, "Brie", 5.5m, 2),
new Cheese(5, "Roquefort", 3.5m, 5),
};
Dans l'exemple ci-dessus, Layla crée un List<Cheese> en utilisant la syntaxe d'initialisation de collection pour définir et peupler la liste avec des objets Cheese. Elle spécifie des propriétés telles que l'ID, le nom, le prix et la force pour chaque objet fromage correspondant à la classe Cheese, en démontrant la création et l'initialisation d'une liste en C#.
Itération dans la liste des fromages pour imprimer l'identifiant et le nom
Layla Porter démontre comment utiliser une boucle foreach pour parcourir le cheeseList et imprimer uniquement l'ID et le Nom de chaque fromage. Vous trouverez ci-dessous le code accompagné d'une explication :
foreach (var cheese in cheeseList)
{
Console.WriteLine($"ID: {cheese.ID}, Name: {cheese.Name}");
}
foreach (var cheese in cheeseList)
{
Console.WriteLine($"ID: {cheese.ID}, Name: {cheese.Name}");
}
Dans le code ci-dessus, Layla utilise une boucle foreach pour traverser le cheeseList. Cela imprime tous les éléments de la liste. La boucle itère à travers chaque objet Cheese de la liste. À chaque itération, la variable cheese contient l'objet Cheese actuel à l'index spécifié. En utilisant Console.WriteLine, elle imprime les propriétés ID et Nom de chaque élément de fromage, montrant comment accéder et afficher des éléments spécifiques d'une liste en C#.
Recherche de fromage à l'aide de LINQ Query
Dans la vidéo à 2:45, Layla Porter montre comment rechercher un fromage spécifique en fonction des données de l'utilisateur à l'aide de LINQ. Elle utilise la méthode ReadLine pour obtenir le nom du fromage auprès de l'utilisateur :
string cheeseName = Console.ReadLine();
string cheeseName = Console.ReadLine();
Alors qu'elle recherche un élément dans la liste, Layla souligne un point clé très important à 2:51. Elle explique que si nous n'utilisions pas LINQ, nous devrions passer manuellement en boucle sur chaque fromage de notre collection pour trouver un nom qui corresponde à la saisie de l'utilisateur, mais les bibliothèques d'aide de LINQ s'en chargent en coulisses, ce qui rend le processus très efficace. L'extrait de code suivant montre comment Layla (3:40) parcourt les éléments de la liste sans utiliser de boucle for, en utilisant simplement la syntaxe de requête LINQ :
if (cheeseList.Any(cheese => cheese.Name == cheeseName))
{
Cheese cheese = cheeseList.FirstOrDefault(c => c.Name == cheeseName);
Console.WriteLine($"{cheese.Name} cheese costs £{cheese.Price.ToString()} and has a strength of {cheese.Strength}.");
}
else
{
Console.WriteLine("I'm sorry, we don't have that cheese.");
}
if (cheeseList.Any(cheese => cheese.Name == cheeseName))
{
Cheese cheese = cheeseList.FirstOrDefault(c => c.Name == cheeseName);
Console.WriteLine($"{cheese.Name} cheese costs £{cheese.Price.ToString()} and has a strength of {cheese.Strength}.");
}
else
{
Console.WriteLine("I'm sorry, we don't have that cheese.");
}
Dans le code ci-dessus :
-
Layla explique qu'au lieu de parcourir manuellement la liste, nous pouvons utiliser LINQ pour une recherche plus efficace. La méthode
Anyvérifie si un fromage de la liste correspond au nom saisi par l'utilisateur. -
Si une correspondance est trouvée, cela signifie que l'élément existe, la méthode
FirstOrDefaultrécupère le premier fromage qui correspond au nom saisi. Cette méthode est sûre car elle renvoie null si aucune correspondance n'est trouvée, ce qui évite les erreurs potentielles. - Si le fromage est trouvé, son nom, son prix et sa force sont imprimés. Si ce n'est pas le cas, un message indiquant que le fromage n'a pas été trouvé s'affiche.
Cette approche met en avant l'efficacité et la simplicité de l'utilisation de LINQ pour la recherche de collections en C#. Le résultat de l'extrait de code est montré à 7:19 : (Meilleure image possible que celle ci-dessous ?)

Gestion de la sensibilité à la casse lors de la recherche
Lorsqu'on travaille avec des chaînes, Layla à 8:00, rappelle qu'il est important de se souvenir qu'elles sont sensibles à la casse. Pour s'assurer que nos comparaisons de noms de fromage ne tiennent pas compte de la casse, nous devons convertir à la fois la saisie de l'utilisateur et les noms de fromage de notre liste en minuscules en utilisant la méthode .ToLower(). Cela permet à l'utilisateur de saisir n'importe quel type de majuscule, et notre code trouvera toujours correctement le fromage correspondant. N'oubliez pas que la sensibilité à la casse des chaînes de caractères peut être gênante et qu'il est donc essentiel de la traiter correctement.
Exemple pratique : Recherche de fromages par force
À (8:50), Layla crée un exemple pratique dans lequel l'utilisateur peut filtrer les fromages en fonction de leur force, démontrant ainsi comment combiner les données de l'utilisateur avec les requêtes LINQ.
1. Invitation à la saisie de l'utilisateur et lecture
Console.WriteLine("What strength cheese are you interested in - choose between 1 and 5");
string strengthString = Console.ReadLine();
Console.WriteLine("What strength cheese are you interested in - choose between 1 and 5");
string strengthString = Console.ReadLine();
Layla à 9:05, commence par demander à l'utilisateur de choisir une valeur de force entre 1 et 5. Cela se fait en posant une simple Console.WriteLine demandant une saisie, suivie de Console.ReadLine() pour récupérer ce qu'ils tapent.
2. convertir l'entrée en nombre entier
bool isInt = int.TryParse(strengthString, out int strength);
bool isInt = int.TryParse(strengthString, out int strength);
Ensuite, à 9:16, elle s'assure que leur entrée est un nombre réel. Elle recommande d'utiliser int.TryParse pour cela. Si l'entrée est vérifiée et convertie avec succès en un nombre entier, c'est parfait ! Si ce n'est pas le cas, nous pouvons nous en charger gracieusement.
3. filtrer les fromages par leur force
List<Cheese> cheeseByStrength = cheeseList.Where(c => c.Strength == strength).ToList();
List<Cheese> cheeseByStrength = cheeseList.Where(c => c.Strength == strength).ToList();
Maintenant vient la partie amusante dans la vidéo de Layla à 10:25. Ici, elle montre comment filtrer notre liste de fromages c'est-à-dire, cheeseList en utilisant LINQ. Avec la méthode Where de LINQ et une expression lambda rapide (c => c.Strength == strength), elle extrait uniquement les fromages qui correspondent à la force choisie par l'utilisateur. Cela nous donne une nouvelle liste, cheeseByStrength.
4. fromages filtrés en sortie
foreach (var cheese in cheeseByStrength)
{
Console.WriteLine($"Name: {cheese.Name} cheese");
}
foreach (var cheese in cheeseByStrength)
{
Console.WriteLine($"Name: {cheese.Name} cheese");
}
Enfin à 12:03, pour finir en beauté, Layla parcourt cheeseByStrength avec une boucle foreach. Pour chaque fromage de cette liste, elle imprime son nom en utilisant le prédicat spécifié dans Console.WriteLine. Simple et efficace !
Lors de l'exécution du programme à 12:17, Layla montre comment l'utilisateur saisit une valeur de force et comment la liste est filtrée pour n'afficher que les fromages ayant la force spécifiée. L'exemple de résultat est présenté ci-dessous : (Meilleure image possible ?)

Conclusion
La vidéo de Layla présente efficacement le concept des listes C# et la manière de les interroger à l'aide de LINQ. En suivant ses exemples et ses explications, les débutants peuvent acquérir des bases solides pour travailler avec des listes et interroger des données en C#. Pour plus de détails et des sessions de codage en direct, consultez la chaîne YouTube de Layla canal et rejoignez ses flux en direct.
N'oubliez pas d'explorer les différentes méthodes et propriétés de la classe List, telles que la propriété Count, la méthode Insert, les fonctions prédicatives, et plus encore, pour améliorer votre compréhension et votre capacité à manipuler les listes efficacement.


