Pregunta

  

Posible duplicado:
   Cola prioritaria en .Net

Esta pregunta es similar, pero quiero saber exactamente:

¿Hay alguna clase / estructura / ... en .Net para la cola de prioridad? Al igual que en STL que tienen priority_queue para esto. Acepta una función comparación para admitir tipos personalizados.

Lo mejor que encontré en .Net es SortedList < Clave, Valor & Gt; que ordena sus valores por Clave. Entonces, una solución es implementar una interfaz personalizada Comparar para la clase Key. Pero no puedo separar mis elementos en pares clave / valor. Tengo elementos atómicos que deben ponerse en cola de acuerdo con sus valores con una función personalizada.

Entonces, ¿hay alguna clase de colección en .Net que acepte una función Comparar para ordenar sus elementos?

¿Hay alguna forma de derivar una clase .Net (tal vez HashSet ) que admita esta función?


Nota:

  • Sé que muchos terceros implementaron clases realmente buenas para esto. Quizás un buen ejemplo sea PowerCollections . Pero quiero una solución rápida y simple usando las clases existentes en .Net
  • Estoy usando .Net Framework 3.5 y me gusta C #;)
¿Fue útil?

Solución

Puede usar una clase SortedDictionary , que es genérica.

Puede especificar un objeto de comparación para el constructor , que debe manejar la comparación de prioridad de sus objetos:

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

Otros consejos

Podría simplemente implementar IComparable en su clase y crear el comparador específico dentro de su clase, de esa manera puede simplemente usar IList.Sort ()?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top