Почему отсортированный список должен иметь пару ключ-значение? - PullRequest
14 голосов
/ 15 марта 2010

Если я просто хочу отсортированный список, состоящий только из дат, целых или двойных чисел, действительно ли необходимо определить SortedList (из Integer, Integer)?

Кажется мне интригующим, но может быть просто тривиальным. Я бы предпочел просто использовать SortedList (из Integer).

(Этот вопрос относится к общим коллекциям .Net)

Ответы [ 5 ]

8 голосов
/ 15 марта 2010

Следующая версия .NET (4.0) будет иметь класс SortedSet, который будет делать то, что вы хотите. До этого момента инкапсуляция SortedList становится наиболее близкой - если вы не хотите реализовать собственный класс для этого или использовать внешние библиотеки коллекций (например, C5 , который имеет класс SortedArray и TreeSet).

3 голосов
/ 15 марта 2010

Вы можете использовать обычный List<T> и позвонить на него Sort.

1 голос
/ 15 марта 2010

Да, это необходимо, потому что именно так был разработан API. : -)

Но не сложно просто создать свой SortedList<T>, который использует SortedList<K,V>. 5 строк кода?

class SortedList<T> : IEnumerable<T> {
    SortedList<T,int> _list = new SortedList<T,int>();
    public IEnumerator<T> GetEnumerator() { return _list.Keys.GetEnumerator(); }
    IEnumerator IEnumerable.GetEnumerator() { return this.GetEnumerator();  }
    public void Add(T v) { _list.Add(v, 1); }
    public int Count { get { return _list.Count; } }
}

Единственная проблема в том, что SortedList не может справиться с дураками.

0 голосов
/ 15 марта 2010

Сортированный список сортируется по ключу, а не по значениям. От MSDN

Элементы объекта SortedList сортируются по ключам либо в соответствии с конкретным IComparer реализация указана, когда SortedList создан или в соответствии с Сравнимая реализация предоставлены сами ключи. В в любом случае, SortedList не разрешить дублирование ключей.

Так что это в основном класс словаря, который поддерживает сортировку. List с другой стороны сортирует по значениям

0 голосов
/ 15 марта 2010

Я думаю HashSet<int> может удовлетворить ваши потребности.

...