6
votes

Est-ce que .NET a un moyen simple de faire des listes de débordement?

Je cherche à ajouter une fonctionnalité "récemment ouverte" à mon application et je me demandais s'il y avait une simple façon de faire des listes "débordement". À ce part, je veux dire, lorsque vous ajoutez un élément au-delà de la capacité de la liste, tous les éléments sont décalés.

Exemple de code de fonctionnalité souhaitée (évidemment ce n'est pas vrai, la liste contiendrait réellement A, B, C): < / p> xxx

désolé pour la question simple. Le problème lui-même est évident de résoudre (le plan d'implantation était d'hériter de la liste), je n'aime tout simplement pas avoir à réinventer la roue et confondre les futurs programmeurs avec des objets personnalisés lorsque la langue ou le cadre a cette fonctionnalité.


4 commentaires

Tout d'abord, liste ou l'une des autres structures de données sont .NET Structures de données, pas C # Structures de données, mais non, mais non, mais non, .NET n'a pas une telle structure de données intégrée qui fera tout de cela automatiquement. Vous pouvez toutefois utiliser une queue ou un linkedlist et un code supplémentaire pour supprimer des éléments supplémentaires une fois que vous avez atteint la limite.


Comme @ lassev.karlsen a déclaré qu'il n'y avait pas une telle chose, mais vous pouvez hériter d'une liste ou d'une file d'attente pour faire votre propre classe qui fonctionne comme vous le souhaitez. Ce n'est pas si difficile de cette façon.


Question similaire:


3 Réponses :


5
votes

Autant que je sache, il n'y a pas de telle collection dans la bibliothèque.
Vous pouvez écrire cela très facilement, basé sur une liste <> ou un tableau. xxx


5 commentaires

Vous ne pensez pas que hériter de la liste intégrée est plus facile et plus facile à gérer?


@Hossein Ce n'est pas une bonne idée d'hériter des listes intégrées. Ils n'ont pas de membres virtuels, donc une simple distribution et votre logique est partie.


@Henk c'est une idée intersive. J'ajouterais un itérateur pour obtenir les articles dans le bon ordre.


@Hossein je pense à mettre en œuvre icollection (ou éventuellement ilist si l'accès à l'index est important) aurait beaucoup de sens. Héritage de la liste Liste La classe elle-même (ou La file d'attente ou autre) serait bien plus de travail et éventuellement dangereux, comme le souligne Yuriy.


Convenu que c'est une mauvaise idée de descendre de la liste , mais vous pouvez descendre de collection , qui est destiné à être hérité et a toutes les méthodes virtuelles dont vous avez besoin.



4
votes

Vous pouvez le faire facilement avec linkedlist code>: xxx pré>

Je serais, personnellement, envelopper cela dans une classe que vous pourriez utiliser, c'est-à-dire:

public class OverflowCollection<T> : IEnumerable<T>
{
    private int max;
    private LinkedList<T> list = new LinkedList<T>();

    public OverflowCollection(int maxItems)
    {
        this.max = maxItems;
    }

    public void Add(T item)
    {
        this.list.AddFirst(item);
        if (this.list.Count > max)
           this.list.RemoveLast();
    }

    // Implement IEnumerable<T> by returning list's enumerator...
}


3 commentaires

À peu près ce que j'allais dire; L'exemple ne serait-il pas addlast, supprimer


@MARC: Cela dépend de la façon dont vous voulez qu'il apparaisse ... pour que l'URM, le plus récent est typiquement d'abord ...


Je faisais simplement comparer la "liste contient" de l'exemple de la question à ce que Getenumerator () reviendrait. Dans la question, il est le plus vieux d'abord



0
votes

Utilisez une classe personnalisée qui implémente IList alors lors de la mise en oeuvre Ajouter Méthode Vérifiez votre contrainte et faites-la.


0 commentaires