С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/323: Рейтинг темы: голосов - 323, средняя оценка - 4.52
63 / 35 / 13
Регистрация: 21.10.2010
Сообщений: 538
1

Сортировка Dictionary по значениям

11.11.2012, 23:01. Показов 62627. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, у меня есть Dictionary<char, double>, есть ли какая-либо системная функция или что-то подобное для сортировки этого словаря по значениям или придется писать вручную?
Насколько я понимаю, Dictionary не реализует IComparable.
Заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.11.2012, 23:01
Ответы с готовыми решениями:

Сортировка Dictionary по алфавиту
Здравствуйте, у меня следующая проблема: имеется объект типа Dictionary&lt;string,int&gt;. Как мне...

Сортировка Dictionary по длине ключа
Есть словарь public Dictionary&lt;string, string&gt; Combination = new Dictionary&lt;string, string&gt;(); В...

Сортировка dictionary + List<class>
Есть следующие данные: class Loot { public string Name; public string ShortName;...

Сортировка Dictionary вложенного в List
Как отсортировать по алфавиту List&lt;Dictionary&lt;string, string&gt;&gt;. Заранее спасибо

12
Эксперт .NET
17792 / 12943 / 3381
Регистрация: 17.09.2011
Сообщений: 21,226
11.11.2012, 23:26 2
Словарь основан на хэш-таблице, а в хэш-таблицах нет такого понятия как очередность элементов.
1
Эксперт Java
4093 / 3827 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
12.11.2012, 06:36 3
Dictionary реализует IEnumerable, можно использовать LINQ-метод OrderBy для сортировки:
C#
1
2
3
4
5
6
7
8
9
10
11
12
        Dictionary<char, int> dict = new Dictionary<char, int>
            {
                {'a', 7},
                {'b', 2},
                {'c', 6},
                {'d', 3},
            };
        
        foreach (var pair in dict.OrderBy(pair => pair.Value))
        {
            Console.WriteLine("{0} - {1}", pair.Key, pair.Value);
        }
5
63 / 35 / 13
Регистрация: 21.10.2010
Сообщений: 538
12.11.2012, 09:50  [ТС] 4
turbanoff, но ведь насколько я понимаю, этот код просто выводит элементы в определенной последовательности, но не меняет их.
Есть может быть какой-то другой класс, который позволяет хранить в себе отсортированные по значению ключ/значение?
0
341 / 341 / 90
Регистрация: 04.03.2010
Сообщений: 648
12.11.2012, 10:02 5

C#
1
2
3
4
5
6
7
8
9
10
Dictionary<char, int> dict = new Dictionary<char, int>
            {
                {'a', 7},
                {'b', 2},
                {'c', 6},
                {'d', 3},
            };
           dict = dict.OrderBy(pair => pair.Value).ToDictionary(pair => pair.Key, pair => pair.Value);
           foreach(var item in dict)
               Console.WriteLine(item.Key + " " + item.Value);
7
63 / 35 / 13
Регистрация: 21.10.2010
Сообщений: 538
12.11.2012, 10:09  [ТС] 6
Спасибо за помощь!
Извините за глупые вопросы, просто в C# я еще совсем новичок.
0
Эксперт Java
4093 / 3827 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
12.11.2012, 10:20 7
Цитата Сообщение от hepr Посмотреть сообщение
Есть может быть какой-то другой класс, который позволяет хранить в себе отсортированные по значению ключ/значение?
Я вижу только две задачи, которые этот класс может выполнить:
1. это обычный ключ-значение
2. Получение всех (части) элементов, отсортированных по значению. Тогда можно исопльзовать OrderBy.

Зачем еще он может быть нужен?
2
Эксперт .NET
17792 / 12943 / 3381
Регистрация: 17.09.2011
Сообщений: 21,226
12.11.2012, 10:34 8
andrew_w2k, это же переливание из пустого в порожнее.
В получившемся словаре все равно элементы не в каком-то определенном порядке будут храниться.
0
341 / 341 / 90
Регистрация: 04.03.2010
Сообщений: 648
12.11.2012, 10:53 9
Цитата Сообщение от kolorotur Посмотреть сообщение
В получившемся словаре все равно элементы не в каком-то определенном порядке будут храниться.
что значит не будут храниться в определенном порядке? они там будут отсортированы по Value
0
Эксперт Java
4093 / 3827 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
12.11.2012, 11:01 10
Цитата Сообщение от andrew_w2k Посмотреть сообщение
что значит не будут храниться в определенном порядке? они там будут отсортированы по Value
Откуда такая информация? Там возвращается обычный Dictionary, который не гарантирует порядок значений.
0
Эксперт .NET
17792 / 12943 / 3381
Регистрация: 17.09.2011
Сообщений: 21,226
12.11.2012, 11:15 11
Цитата Сообщение от andrew_w2k Посмотреть сообщение
они там будут отсортированы по Value
Еще разок: о какой упорядоченности может идти речь применительно к коллекции, в которой такого понятия как упорядоченность просто нет?
То есть в чем смысл пытаться отсортировать внутреннее хранилище словаря, если доступ к его элеменам все равно происходит атомарно?
Тогда уж лучше SortedList или SortedDictionary использовать.
0
341 / 341 / 90
Регистрация: 04.03.2010
Сообщений: 648
12.11.2012, 11:21 12
Цитата Сообщение от turbanoff Посмотреть сообщение
Откуда такая информация? Там возвращается обычный Dictionary, который не гарантирует порядок значений.
не совсем понимаю, я же явно указываю критерий сортировки
Цитата Сообщение от andrew_w2k Посмотреть сообщение
C#
1
dict = dict.OrderBy(pair => pair.Value).ToDictionary(pair => pair.Key, pair => pair.Value)
порядок элементов Dictionary отличается перед и после сортировки
0
65 / 50 / 7
Регистрация: 09.11.2012
Сообщений: 219
29.11.2012, 06:14 13
Парни, вы все гоните (или не все).
Получить несколько элементов из Dictionary
0
29.11.2012, 06:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2012, 06:14
Помогаю со студенческими работами здесь

Проинициализировать значениями dictionary вложенный в dictionary
Народ, помогите, как проинициализировать значениями такую конструкцию: Dictionary...

Сложный Dictionary<MyClass, Dictionary<List<MyClass2>, List<string>>> MyDictionary
Здравствуйте. Помогите plz реализовать обращения к словарю вида : Dictionary&lt;MyClass,...

Как преобразовать Dictionary<string, int> в Dictionary<object, int>
Есть метод с сигнатурой public KeyValuePair&lt;string, int&gt; MyMethod(Dictionary&lt;string, int&gt; dic,...

Как архивировать Dictionary<string, Dictionary<string, decimal[,]>>
Программа периодически создает Dictionary&lt;string, Dictionary&lt;string, decimal&gt;&gt; большого размера....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru