Question

  

Double possible:
   File d'attente prioritaire dans .Net

Cette question est similaire, mais je veux savoir exactement:

Existe-t-il une classe / struct / ... dans .Net pour la file d'attente prioritaire? Comme dans STL, il existe priority_queue pour cela. Il accepte une fonction comparsion pour prendre en charge les tris personnalisés.

La meilleure chose que j'ai trouvée dans .Net est SortedList < Clé, valeur & Gt; qui trie ses valeurs par clé. Une solution consiste donc à implémenter une interface personnalisée Comparer pour la classe Key. Mais je ne peux pas séparer mes éléments en paires clé / valeur. J'ai des éléments atomiques qui doivent être mis en file d'attente en fonction de leurs valeurs avec une fonction personnalisée.

Y a-t-il une classe de collection dans .Net qui accepte une fonction de comparaison pour trier les éléments qui le composent?

Existe-t-il un moyen de dériver une classe .Net (peut-être HashSet ) prenant en charge cette fonctionnalité?

Remarque:

  • Je sais que de nombreux tiers ont mis en place de très bonnes classes pour cela. PowerCollections est un bon exemple. Mais je veux une solution simple et rapide en utilisant les classes existantes en .Net
  • J'utilise .Net Framework 3.5 et j'aime C #;)
Était-ce utile?

La solution

Vous pouvez utiliser une classe SortedDictionary , qui est générique.

Vous pouvez spécifier un objet comparateur dans le constructeur , qui devrait gérer la comparaison de priorité de vos objets:

public class DataComparer : IComparer<Data>
{
    public Int32 Compare(Data a, Data b)
    {
        if (a == null && b == null)
            return 0;
        if (a == null)
            return -1;
        if (b == null)
            return +1;
        return a.Priority.CompareTo(b.Priority);
    }
}

SortedDictionary<Data, Data> priQueue = new SortedDictionary<Data, Data>(
    new DataComparer());

Autres conseils

Vous pouvez simplement implémenter IComparable sur votre classe et créer le comparateur spécifique à l'intérieur de votre classe, de cette façon, vous pouvez simplement utiliser IList.Sort ()?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top