Вопрос

Возможный дубликат:
Приоритетная очередь в .Net

Этот вопрос похоже, но я хочу точно знать:

Есть ли какой-нибудь класс/структура/...в .Net для приоритетной очереди?Точно так же, как в STL, где есть priority_queue для этого.Он принимает сравнение функция для поддержки индивидуальных сортировок.

Лучшее, что я нашел в .Net, это SortedList<Ключ, Значение> который сортирует значения по ключу.Одним из решений является реализация пользовательского Сравнивать интерфейс для класса Key.Но я не могу разделить свои элементы на пары ключ/значение.У меня есть атомарные элементы, которые должны быть поставлены в очередь в соответствии со своими значениями с помощью специальной функции.

Итак, есть ли в .Net какой-либо класс коллекции, который принимает функцию сравнения для сортировки его элементов?

Есть ли способ получить класс .Net (возможно, Хэшсет), который поддерживает эту функцию?


Примечание:

  • Я знаю, что многие сторонние разработчики реализовали для этого действительно хорошие классы.Возможно, хорошим примером является PowerCollections.Но я хочу быстрое и простое решение, используя существующие классы в .Net.
  • Я использую .Net Framework 3.5 и мне нравится C#;)
Это было полезно?

Решение

Вы можете использовать Сортированный словарь класс, который является универсальным.

Вы можете указать объект сравнения для конструктор, который должен обрабатывать сравнение приоритетов ваших объектов:

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

Другие советы

Вы могли бы просто реализовать IComparable в своем классе и создать конкретный компаратор внутри своего класса, чтобы вы могли просто использовать IList.Sort() ?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top