Domanda

  

Possibile duplicato:
   Coda di priorità in .Net

Questa domanda è simile, ma voglio sapere esattamente:

Esiste una classe / struct / ... in .Net per la coda di priorità? Proprio come in STL che ha priority_queue per questo. Accetta una funzione comparazione per supportare ordinamenti personalizzati.

La cosa migliore che ho trovato in .Net è SortedList < Chiave, Valore & Gt; che ordina i suoi valori per Chiave. Quindi una soluzione sta implementando un'interfaccia Confronta personalizzata per la classe chiave. Ma non posso separare i miei elementi in coppie chiave / valore. Ho elementi atomici che devono essere messi in coda in base ai loro valori con una funzione personalizzata.

Quindi, esiste una classe di raccolta in .Net che accetta una funzione di confronto per ordinare i suoi elementi?

Esiste un modo per derivare una classe .Net (forse HashSet ) che supporta questa funzione?


Nota:

  • So che molte terze parti hanno implementato classi davvero valide per questo. Forse un buon esempio è PowerCollections . Ma voglio una soluzione rapida e semplice usando le classi esistenti in .Net
  • Sto usando .Net Framework 3.5 e come C #;)
È stato utile?

Soluzione

Puoi utilizzare una classe SortedDictionary , che è generica.

Puoi specificare un oggetto comparatore nel costruttore , che dovrebbe gestire il confronto prioritario dei tuoi oggetti:

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());

Altri suggerimenti

Potresti semplicemente implementare IComparable sulla tua classe e creare il comparatore specifico all'interno della tua classe, in questo modo puoi semplicemente usare IList.Sort ()?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top