Programmation .Net - Indépendance financière

La List Collections.Generic en Visual Basic/C#

Les Generics sont une preuve que la programmation orientée objet aide le domaine de l’informatique et les programmeurs à progresser. Imaginez un tableau se contrôlant automatiquement et vous offrant des méthodes rapides pour ajouter, supprimer, modifier et rechercher des éléments. Une game de plusieurs outils fonctionnant tous sur une base similaire. C’est une façon plus simple de ne pas avoir à réinventer la roue à chaque fois que l’on désir travailler avec des structures de données comme les listes.

À mon avis, les plus importantes sont : la List, le Dictionary, la Queue ainsi que la Stack.

Je compte diviser les prochains tutoriels en un par type de collection mentionné ci-dessus. Ainsi, je veux m’assurer de passer assez de temps sur chacune. Nous commencerons donc par la List et une fois que nous aurons couvert tous les Generics importants, je vous donnerez un petit tutoriel sur l’utilisation de Linq (probablement après avoir couvert les objets et les classes).

La List offre plusieurs méthodes permettant de faire plus que son petit frère le ArrayList. Vous devriez d’ailleurs considérer la List pour la plupart de vos opérations de routines, par exemple garder en mémoire une liste d’étudiants!

Premièrement, nous allons créer une instance de liste, c’est-à-dire une liste réelle à partir du template de List fourni. L’utilisation du mot clé New vous donne un indice sur ce fait.

Visual Basic

Module Program
    Sub Main()
        ' Création d'une nouvelle instance (déclaration et initialisation) de Generic Class List.
        Dim ListOfNames = New List(Of String)

    End Sub
End Module

C#

class Program
{
    static void Main(string[] args)
    {
        // Création d'une nouvelle instance (déclaration et initialisation) de Generic Class List.
        List<string> listOfNames = new List<string>();
    }
}

Ceci crée une version réelle que nous pouvont utiliser de la classe List. Si vous n’êtes pas certain de ce qui se passe je vais y revenir lorsque je parlerai des classes. Attention, au (Of String)/List, ceci indique le type de la List, elle ne pourra contenir que des éléments de type String ou chaîne de caractères. Si vous aviez indiqué par exemple (Of Integer)/List, alors la List ne pourrait contenir que des éléments de type Integer.

Maintenant que notre List est réelle, nous sommes prêt à y ajouter des données!

Add(T Element)

Facile d’ajouter des données à une telle collection, vous pouvez simplement utiliser la méthode Add(T Element). Pourquoi est-ce que j’utilise le type T? C’est parce que T représente le type que vous avez déclaré ci-dessus, dans notre cas, il s’agit de String. Vous pourriez utiliser pratiquement n’importe quel type. Voici donc une exemple d’ajout d’élément à cette List.

Visual Basic

Module Program
    Sub Main()
        ' Create a new instance of the Generic class List.
        Dim ListOfNames = New List(Of String)

        ' Add 3 elements to the list.
        ListOfNames.Add("Alexandre")
        ListOfNames.Add("Maxime")
        ListOfNames.Add("Daniel")
    End Sub
End Module

C#

class Program
{
    static void Main(string[] args)
    {
        // Create a new instance of the Generic class List.
        List<string> listOfNames = new List<string>();

        // Add 3 elements to the list.
        listOfNames.Add("Alexandre");
        listOfNames.Add("Maxime");
        listOfNames.Add("Daniel");
    }
}

Il est aussi possible d’utiliser AddRange(Collection) pour ajouter le contenu d’une autre collection à celle-ci. Cette pratique est plus utile et plus rapide que d’utiliser une boucle et d’ajouter élément par élément.

Remove(T Element)

La suppression d’un élément de notre List est effectuée de façon assez similaire, vous devez utiliser l’une de ces méthodes : Remove(T Element), RemoveAt(Integer Index), RemoveAll(Predicate function) ou encore RemoveRange(Integer IndexDeDepart, Integer Compte).

La méthode Remove permet de supprimer un élément spécifique, voici un exemple d’utilisation :

Visual Basic

ListOfNames.Remove("Maxime")

C#

listOfNames.Remove("Maxime");

Remarque: si l’élément que vous souhaitez supprimer n’existe pas, aucun élément sera supprimer et aucune erreur n’apparaîtra.

Une autre option est d’utiliser la méthode RemoveAt(Integer Index) qui supprime un élément à un indice spécifique. Par exemple, la chaine de caractères “Alexandre” est à l’indice 0 (les List aussi commencent à 0) donc je peux le supprimer comme suit :

Visual Basic

ListOfNames.RemoveAt(0)

C#

listOfNames.RemoveAt(0);

Nous ne verrons pas la méthode RemoveAll pour le moment car nous aurons besoin de Linq pour vraiment en profiter!

D’autre part, pour RemoveRange, vous pouvez supprimer un nombre précis d’élément à partir d’un élément en particulier. Par exemple, si la List contient 5 élément, vous pouvez supprimer l’élément à partir de 3 (4ieme) allant jusqu’à 5(6ieme) de la façon suivante :

Visual Basic

ListOfNames.RemoveRange(3, 3)

C#

listOfNames.RemoveRange(3, 3);

La suppression commence donc à 3 et supprime 3 éléments de la liste selon les arguments Index et Count respectivement.

Insert(Integer Position, T Element)

Il est aussi possible d’insérer un élément à une position en particulier en utilisant la méthode Insert(Integer Position, T Element). Voici un exemple de son utilisation. N’oubliez pas que la position commence à 0.

Visual Basic

ListOfNames.Insert(1, "Alexandre")

C#

listOfNames.Insert(1, "Alexandre");

Dans l’exemple précédent, nous ajoutons la chaine de caractères “Alexandre” à la position 1 dans la List.

Contains(T Element)

Cette méthode vérifie la présence d’un élément dans la List, si ce dernier s’y retrouve, elle vous retournera la valeur boolean True, sinon elle retournera False. Ceci rend son utilisation convenable pour un If par exemple.

Visual Basic

If ListOfNames.Contains("Alexandre") Then
   Console.WriteLine("La list contient le nom Alexandre!")
End If

C#

if (listOfNames.Contains("Alexandre"))
    Console.WriteLine("La liste contient le nom Alexandre!");

Attention, la méthode Contains prend en paramètre un élément de type T, dans certains cas, du moins si vous n’utilisez pas des types standards comme String, Integer, Double ou autre, vous risquez de ne pas pouvoir rechercher correctement. Vous devrez alors implémenter l’interface IEquatable que l’on couvrira plus tard car ceci est un sujet plus avancé. Toutefois, si vous voulez plus d’information sur le sujet, vous pouvez vour référer au site Web de MSDN.

Clear()

La méthode Clear() permet de vider complétement la liste de son contenu.

Visual Basic

ListOfNames.Clear()

C#

listOfNames.Clear();

Deboggage

Encore une fois, je vous suggère très fortement de mettre des breakpoints dans votre code pour comprendre mieux le fonctionnement de la List. Vous pourriez aussi tenter de créer une deuxième List prenant (Of Integer) des nombres entiers seulement et même ajouter des nombres aléatoires avec une boucle comme nous avons fait dans un exercice précédent.

Generic List Debug

Remaquez que vous pouvez cliquer sur la petite flèche pour montrer ce qui se trouve à l’interieur de votre variable de type List.

Voici le code complet du tutoriel si vous souhaitez vous exercer un peu avec.

Visual Basic

Module Program
    Sub Main()
        ' Création d'une nouvelle instance de la list de noms.
        Dim ListOfNames = New List(Of String)

        ' Ajout d'éléments à la liste.
        ListOfNames.Add("Alexandre")
        ListOfNames.Add("Maxime")
        ListOfNames.Add("Daniel")

        ' Suppression d'éléments de la liste avec Remove et RemoveAt.
        ListOfNames.Remove("Maxime")
        ListOfNames.RemoveAt(0)

        ' On réinsert le nom Alexandre dans la liste.
        ListOfNames.Insert(1, "Alexandre")

        ' On vérifie si la liste contient l'élément Alexandre que nous venons d'insérer.
        If ListOfNames.Contains("Alexandre") Then
            Console.WriteLine("The list contains the name Alexandre!")
        End If

        Console.ReadKey()
    End Sub
End Module

C#

class Program
{
    static void Main(string[] args)
    {
        // Création d'une nouvelle instance de la list de noms.
        List<string> listOfNames = new List<string>();

        // Ajout d'éléments à la liste.
        listOfNames.Add("Alexandre");
        listOfNames.Add("Maxime");
        listOfNames.Add("Daniel");

        // Suppression d'éléments de la liste avec Remove et RemoveAt.
        listOfNames.Remove("Maxime");
        listOfNames.RemoveAt(0);

        // On réinsert le nom Alexandre dans la liste.
        listOfNames.Insert(1, "Alexandre");

        // On vérifie si la liste contient l'élément Alexandre que nous venons d'insérer.
        if (listOfNames.Contains("Alexandre"))
            Console.WriteLine("The list contains the name Alexandre!");

        Console.ReadKey();
    }
}

Ces méthodes de base vous aideront à utiliser les List et vous donnent une base sur les autres types de Collections.Generic que nous verrons. Ces dernières partagent plusieurs méthodes avec la List. Gardez en tête qu’il existe d’autres méthodes que nous explorerons plus tard, par exemple le Sort(), le All(), le Select(), le Where(), le Any() et autre lorsque nous verrons le Linq.

Si vous désirez plus d’information sur les List, vous pouvez vous référer au site Web de MSDN ou encore poster vos questions dans les commentaires!

Vidéo YouTube

Next article Le Dictionary Collections.Generic en Visual Basic/C#
Previous article Comment changer la langue de l'interface dans Visual Studio

Related posts

0 Comments

No Comments Yet!

You can be first to comment this post!

Leave a Comment

Your data will be safe! Your e-mail address will not be published. Also other data will not be shared with third person. Required fields marked as *