Пользовательская сортировка Hashtable в C # (не по ключам) - PullRequest
1 голос
/ 24 июня 2011

Мне нужно отсортировать данные в Hashtable по свойству объекта, добавленного в коллекцию.как это сделать?мой проект использует .NET 2.0, поэтому я не могу использовать какие-либо функции, которые не работают по умолчанию в среде выполнения .NET 2.0 (возможно, я смогу использовать некоторые функции C # 3.0, которые будут работать в .NET 2.0, без добавления ссылок налюбые новые библиотеки).все объекты, добавленные в хеш-таблицу, относятся к одному типу.Если я использую SortedList и передаю ему Hashtable (через конструктор), то он сортирует только по ключам, есть ли способ передать ему собственную логику сортировки?

Ответы [ 4 ]

3 голосов
/ 24 июня 2011

если вы связаны с .NET 2.0, вы можете использовать IComparer. http://codebetter.com/davidhayden/2005/02/27/implementing-icomparable-for-sorting-custom-objects/

a Hashtable - определенно неправильная структура данных, если вы хотите что-то отсортировать.

0 голосов
/ 24 июня 2011

Один из вариантов, если вы хотите придерживаться создания отсортированного списка из содержимого Hashtable, это написать подкласс IComparer, при необходимости перегрузить метод Compare и создать отсортированный список, используя:

SortedList s = new SortedList( new MyIComparer() );

Затем добавьте элементы вашего Hashtable в список соответственно.

0 голосов
/ 24 июня 2011

Взгляните на недостатки хеш-таблицы.Затем посмотрите на преимущества и определите, используете ли вы правильную структуру данных.Если вы сортируете очень редко, возможно, вы используете правильную структуру данных.В этом случае для сортировки потребуется перечислить значения и поместить их в список.Если сортировка выполняется часто, рассмотрите возможность перехода к другой структуре данных, например, дерево поиска .Если вы редко выполняете поиск / поиск, я бы рассмотрел использование обычного списка.

0 голосов
/ 24 июня 2011

@ Снупи сказал IComparer, это действительно то, что тебе нужно.Взгляните на SortedDictionary.

...