Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
2 / 2 / 3
Регистрация: 11.07.2012
Сообщений: 228

Сортировка List <Dictionary> по ключу

15.06.2020, 11:44. Показов 3280. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день
Есть заполненный List из базы данных.
Сразу оговорюсь необходимо отсортировать список именно в коде программы, а не в Базе Данных!
C#
1
2
string query = "SELECT `DOC_ID`, `DOC_NO`, `DATE`, `PERSON_CODE`, `AMOUNT`, `VAT` FROM `documents` WHERE `DOCUMENT_CODE` = '" + Id + "'";
List<Dictionary<string, object>> ArrayHash = SelectToHashInArray(query);
Мне необходимо отсортировать список List по ключу Dictionary "DOC_NO"
Пробовал такое решение
C#
1
ArrayHash = ArrayHash.OrderBy(pair => pair.Value).ToDictionary(pair => pair.Key, pair => pair.Value);
но оно не помогает
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.06.2020, 11:44
Ответы с готовыми решениями:

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

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

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

27
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18401 / 14333 / 5370
Регистрация: 17.03.2014
Сообщений: 29,011
Записей в блоге: 1
15.06.2020, 15:17
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от miragex Посмотреть сообщение
Вот оно решение задачи.
Решение с SQL не пробовал? Сортировка List <Dictionary> по ключу

Добавлено через 1 минуту
Цитата Сообщение от I2um1 Посмотреть сообщение
ну хз, я боюсь, что там не только два числа через дробь
Это да. Я исходил из того там только числа через слеш.
0
2 / 2 / 3
Регистрация: 11.07.2012
Сообщений: 228
15.06.2020, 15:26  [ТС]
Добавлено через 1 минуту
Цитата Сообщение от I2um1 Посмотреть сообщение
miragex, неа:
Сортировка List <Dictionary> по ключу
Проверяйте у себя!
Вот мои отсортированный данные данные
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
"SLineApplication.vshost.exe" (Управляемый (v4.0.30319)): Загружен "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Accessibility\v4.0_4.0.0.0__b03f5f7f11d50a3a\Accessibility.dll"
045/1
045/2
045/3
045/4
045/5
045/6
045/7
045/8
045/9
045/10
045/11
045/12
045/13
045/14
045/15
Поток '<Без имени>' (0xf00) завершился с кодом 0 (0x0).
а вот так без сортировки
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
"SLineApplication.vshost.exe" (Управляемый (v4.0.30319)): Загружен "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\Accessibility\v4.0_4.0.0.0__b03f5f7f11d50a3a\Accessibility.dll"
045/1
045/10
045/11
045/12
045/13
045/14
045/15
045/2
045/3
045/4
045/5
045/6
045/7
045/8
045/9
Поток '<Без имени>' (0xf00) завершился с кодом 0 (0x0).
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
15.06.2020, 15:29
miragex, так я скрин кинул. Или этого мало?

Регулярное выражение убирает всё отличное от цифр, потому 134/3 < 76/25 < 134/12, что неправильно.
1
2 / 2 / 3
Регистрация: 11.07.2012
Сообщений: 228
15.06.2020, 15:42  [ТС]
согласен.
Пример был неудачен.
Главное решение найдено. Теперь будем допиливать его. Попробую Ваш метод.
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
15.06.2020, 15:47
miragex, лучше две колонки и сортировку на стороне базы данных.
0
2 / 2 / 3
Регистрация: 11.07.2012
Сообщений: 228
15.06.2020, 16:19  [ТС]
Цитата Сообщение от I2um1 Посмотреть сообщение
На C# без каста решить можно так (на SQL точно так же правится):
........
Т.е. сортируем сначала по длине, а потом по значению. Но лучше использовать класс вместо словаря, а еще лучше DOC_NO хранить в базе данных как две колонки.
Вот так будет лучше:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var BillArrayHash = new List<Dictionary<string, object>>
{
 new Dictionary<string, object> { ["DOC_NO"] = "76/25" },
 new Dictionary<string, object> { ["DOC_NO"] = "134/1" },
 new Dictionary<string, object> { ["DOC_NO"] = "134/12" },
 new Dictionary<string, object> { ["DOC_NO"] = "134/2" },
 new Dictionary<string, object> { ["DOC_NO"] = "134/3" }
};
Func<object, int, int> getPart = (value, index) => Convert.ToInt32(((string)value).Split('/')[index]);
BillArrayHash = BillArrayHash
 //.OrderBy(dict => getPart(dict["DOC_NO"], 0).Length)
 .OrderBy(dict => getPart(dict["DOC_NO"], 0))
 //.ThenBy(dict => getPart(dict["DOC_NO"], 1).Length)
 .ThenBy(dict => getPart(dict["DOC_NO"], 1))
 .ToList();
Убираем лишние две сортировки
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
15.06.2020, 16:26
miragex, лучше, если нет еще чисел и букв. В 11 посте есть такое же решение, но на SQL. Я тут погуглил и нашел:

Бывают еще номера без дроби, с буквами.
1
2 / 2 / 3
Регистрация: 11.07.2012
Сообщений: 228
15.06.2020, 16:37  [ТС]
у меня таких в базе нет поэтому я такое решение не рассматривал. Но хочется сделать оригинальный метод.
Буду дальше разбираться.
Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.06.2020, 16:37

Сортировка List<my class{id, name}> по Dictionary<id, order>
Буду благодарен за помощь Есть некий лист public class Field { public string Name; public int ID; } var list...

Выборка из Dictionary по ключу
Всем привет! Первая тема на форуме, прошу сильно не ругаться, если я что-то упустил или затупил. Держу игровой сервер, на досуге пишу для...

Отсортировать Dictionary по ключу
В общем, у меня есть такой код Dictionary&lt;string, string&gt; dictionary = new Dictionary&lt;string, string&gt;() { ...

Dictionary: обращение по ключу и по индексу
Помогите исправить, необходимо написать класс к элементам которого можно обращаться по ключу и индексу using System; using...

Поиск значения по ключу в Dictionary
Как сделать что бы я вводил &quot;ttt&quot;, а мне выводила &quot;глицин&quot; и наоборот все варианты? using System; using...


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

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Из невышедшего на форуме-2. Беседа с ИИ об олдскульных разработчиках и их методов в программировании
zorxor 23.09.2026
Друзья, этот материал не вышел на форуме, а хотя он очень и очень важный. Хотя, точнее, материал этот вышел, но оказался несовместимым с форматом форума. А тут можно, в блоге. . . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru