Pergunta

Duplicate possíveis:
fila na Net

Esta questão é semelhante, mas eu quero saber exatamente:

Existe alguma classe / struct / ... em .Net para fila de prioridade? Assim como em STL que priority_queue para isso. Ele aceita um comparsion função para apoiar os tipos personalizados.

A melhor coisa que eu encontrei em .Net é SortedList que classifica seus valores por Key. Então, uma solução está a implementar um costume Comparar de interface para a classe Key. Mas eu não posso separar meus elementos em pares de chave / valor. Eu tenho elementos atômicos que devem fila de acordo com os seus valores com uma função personalizada.

Então, há alguma classe de coleção na Net que aceita uma função Comparar para classificar a TI de elementos?

Existe alguma maneira para derivar uma classe .Net (talvez HashSet ) que suporta este recurso?


Nota:

  • Eu sei que muitos Terceiros implementado realmente boas aulas para isso. Talvez um bom exemplo é PowerCollections . Mas eu quero t rápida e simples solução usando classes existentes em .Net
  • Eu estou usando .Net Framework 3.5 e, como C #;)
Foi útil?

Solução

Você pode usar um SortedDictionary classe, que é genérico.

Você pode especificar um objeto comparer ao construtor , que deve lidar com a comparação prioridade de seus 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());

Outras dicas

Você poderia apenas implementar IComparable na sua classe e criar o comparador específico dentro de sua classe, de que maneira você pode apenas usar IList.Sort ()?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top