Есть ли какой-нибудь отсортированный список в C #, который позволяет сортировке происходить, когда мы добавляем в нее элементы? - PullRequest
2 голосов
/ 20 декабря 2010

Есть ли какой-нибудь отсортированный список в C #, который позволяет сортировке происходить, когда мы добавляем в нее элементы? Под этим я подразумеваю то, что мне не нужен List, имеющий метод .Sort (), а список, который фактически помещает элементы в правильное место, когда я добавляю их в него (я думаю, это внутренне). будет какое-то дерево).

Вот мой сценарий:

class Worker {
    ...some fields
    public int salary;
}

Я бы хотел добавить работников в свой список и отсортировать их по зарплате. Я хотел бы тогда сделать список [0] и знать, что этот работник - тот, у кого самая высокая зарплата. Затем перечислите [1] и знайте, что это будет тот, у кого вторая самая высокая зарплата и т. Д.

Есть ли какая-либо структура данных в C #, которая выполняет это?

Спасибо

Ответы [ 4 ]

2 голосов
/ 20 декабря 2010
1 голос
/ 20 декабря 2010

Поскольку вы, похоже, хотите набор работников , а не карту зарплаты работнику , я бы выбрал SortedSet<T>. Чтобы упорядочить структуру данных по зарплате, необходимо, чтобы класс Worker реализовал IComparable<Worker>. В качестве альтернативы, напишите IComparer<Worker> и заставьте SortedSet использовать это вместо этого. Обратите внимание, что этот класс dos не поддерживает быстрый доступ по index , поэтому вам придется использовать что-то еще, если это важное требование.

EDIT: Подумайте об этом, подходя с SortedList<int, Worker> или SortedDictionary<int, Worker>, здесь не уместно, поскольку они не поддерживают дубликаты ключей.

0 голосов
/ 20 декабря 2010

Ближайшим (не технически списком) вы получите класс SortedList <TKey, TValue> (это общая версия SortedList, перечисленная в других вопросах).

0 голосов
/ 20 декабря 2010

MSDN говорит о System.Collections.SortedList:

Когда элемент добавляется, он вставляется в SortedList в правильном порядке сортировки, и индексирование корректируется соответствующим образом.

Но то, что вам нужно, должно быть реализовано как умный класс, который знаком с worker классом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...