Skip to content

Est-ce que c#/.net xx a une implémentation d’une liste doublement chaînée (qui peut être itérée à l’envers) ?

Solution:

Le code suivant itérera efficacement sur une LinkedList en sens inverse :

        LinkedList<string> list = new LinkedList<string>
            (new[] {"cat", "dog", "frog", "antelope", "gazelle"});
        LinkedListNode<string> item = list.Last;
        do
        {
            Console.WriteLine(item.Value);
            item = item.Previous;
        }
        while (item != null);
        Console.ReadKey();

La clé ici est qu’une LinkedList contient une référence uniquement aux instances First et Last LinkedListNode de la liste. Chaque instance de LinkedListNode contient une référence à l’élément suivant et précédent de la liste (ou null à chaque extrémité de la liste) ainsi qu’une propriété Value. Cela signifie que l’itération à partir du premier ou du dernier LinkedListNode est facile, mais l’accès aléatoire nécessite une itération à partir du premier ou du dernier de la liste.

Si vous devez faire une insertion en cours de route, utilisez LinkedList.AddBefore ou AddAfter pour insérer un nouveau LinkedListNode.

En plus des réponses données ici, vous pouvez écrire une méthode d’extension pour LinkedList<T> pour le rendre un peu plus facile à réutiliser :

public static IEnumerable<T> Backwards<T>(this LinkedList<T> list)
{
    LinkedListNode<T> node= list.Last;
    while (node != null)
    {
        yield return node.Value;
        node = node.Previous;
    }
}

Utiliser avec:

foreach (string x in list.Backwards())
{
    // ...
}

Que diriez-vous de System.Collections.Generic.LinkedList()

Voici les docs sur MSDN :

http://msdn.microsoft.com/en-us/library/he2s3bh7.aspx

Informations sur la version

.NET Framework : pris en charge dans : 3.5, 3.0, 2.0
.NET Compact Framework : pris en charge dans : 3.5, 2.0
XNA Framework : pris en charge dans : 3.0, 2.0, 1.0

Cela dit, je suis avec les autres qu’il est généralement préférable d’utiliser une abstraction plus élevée lorsque l’on travaille avec un framework aussi riche.



Articles Similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.