Каков самый простой способ передвижения клавиш хеш-таблицы в алфавитном порядке?Как перемещаться по клавишам Hashtable в алфавитном порядке?
ответ
Это зависит от типа ключа. Но давайте предположим на минуту, что это строки. Вы можете использовать следующий запрос LINQ
Hashtable table = GetHashTable();
var keys = table.Keys.Cast<String>().OrderBy(x => x);
Для более сложных структур запрос LINQ немного отличается. Давайте предположим, что вы имели следующее определение ключевого
struct Name {
public string First;
public string Last;
// Equality code omitted
}
код LINQ будет следующим
Hashtable table = GetHashtable();
var keys = table.Keys.Cast<Name>().OrderBy(x => x.First).ThenBy(x => x.Last);
Вот на самом деле не то, что хэш-таблицы предназначены для (они сделаны, чтобы иметь равномерное распределение ключей). Использовать отсортированное дерево?
Мне нужно работать с устаревшим кодом. На данный момент я совершенно неохотно реорганизую его, чтобы использовать что-то вроде SortedDictionary и т. Д. Но все же мне нужно пересечь ключи (строки) в алфавитном порядке. –
Если вы хотите, чтобы карта, которая хранит свои ключи в натуральном порядке, я предлагаю вам не использовать Hashtable
для начала. Если вы все еще используете 1.1, используя System.Collections.SortedList
. Если вы используете 2.0 или выше, используйте SortedList<TKey, TValue>
или SortedDictionary<TKey, TValue>
. Последние два являются в значительной степени одинаковыми с точки зрения API, но имеют разные характеристики производительности - см. Документы для получения дополнительной информации.
Мне нравится идея SortedDictionary. Есть ли простой способ бросить между Hashtable и SortedDictionary
Нет - это разные типы. Вы можете создать новый SortedDictionary из Hashtable с некоторой осторожностью. Но если вы все равно используете .NET 2.0, почему вы используете Hashtable в первую очередь? В большинстве случаев вы должны просто заменить Hashtable на SortedDictionary, если вам не нужен поиск O (1). –
Ну, я нашел этот фрагмент кода, чтобы быть наиболее подходящим для моей ситуации:
Hashtable settings = GetSettings(); ArrayList keys = new ArrayList(); keys.AddRange(settings.Keys); keys.Sort(); foreach (object key in keys) { // Logic here }
Это, вероятно, будет немного быстрее использовать SortedList -
SortedList settings = new SortedList(GetSettings());
foreach (object key in settings.Keys)
{
//logic
}
создания & сортировки ArrayList - это O (n) + O (nlog n) = O (nlog n), тогда как конструктор SortedList (в соответствии с документами) равен O (n), поэтому быстрее использовать SortedList, а не использовать arraylist и явно сортировка
- 1. C# Hashtable, отсортированный по клавишам
- 2. Как перемещаться по клавишам/значениям объекта в потоке мула
- 3. Сфинкс в алфавитном порядке
- 4. Сортировать по приоритету не в алфавитном порядке
- 5. Как нажимать в алфавитном порядке?
- 6. Заказать HashMap в алфавитном порядке по значению
- 7. результаты в алфавитном порядке по Dir.glob
- 8. Словарь по ключевым словам в алфавитном порядке
- 9. Сортировка массива по записи в алфавитном порядке?
- 10. Список имен в алфавитном порядке подсчета в порядке по убыванию
- 11. Списки в алфавитном порядке по заказу JavaScript
- 12. Freemarker Hashtable <Integer, String>, итерация по клавишам
- 13. TaffyDB в алфавитном порядке
- 14. сортировки в алфавитном порядке
- 15. FirebaseListAdapter в алфавитном порядке
- 16. MySQL в алфавитном порядке
- 17. link_to в алфавитном порядке
- 18. Фамилии в алфавитном порядке
- 19. struts2 автозаполнение: перемещаться по клавишам с помощью клавиш со стрелками
- 20. mysql в алфавитном порядке
- 21. в алфавитном порядке, помощь
- 22. в алфавитном порядке импорта
- 23. Есть ли какой-либо способ циклически перемещаться по клавишам объекта?
- 24. Сортировка массива в алфавитном порядке
- 25. Рельсы фильтр в алфавитном порядке
- 26. Сортировка dict в алфавитном порядке
- 27. Отображать имена в алфавитном порядке
- 28. Treeset в алфавитном порядке сортировка
- 29. Сортировка основы в алфавитном порядке
- 30. JSON.parse() возвращает в алфавитном порядке
«Не удается разрешить символ Cast» :( –
@SeasonedCoder: вам нужно включить System.Linq. См. Http://msdn.microsoft.com/en-us/library/bb341406.aspx –