Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/15: Рейтинг темы: голосов - 15, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 20

Сортировка по частоте записей

04.04.2015, 23:05. Показов 3335. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Возникла проблема с сортировкой по частоте записей в DATAGRIDWIEW или просто в DATAGRID, это не важно. Допустим у меня есть один Вася, четыре Алёши и восемь Коль в произвольном порядке. После сортировки по этой колонке я получу сначала 4 Алёши (потому, что он на букву А), потом одного Васю (так как следующая буква В), ну и в конце 8-мь Коль. А надо сортировку по частоте встречающихся записей. То есть, сначала 8 Коль, 4 Алёши и 1 Вася. На первый взгляд всё просто, но... В интернете я не нашел готовых ответов и решений. Можно самому в гриде сделать ещё одну колонку и в результате разных манипуляций с массивами и сортировками заполнить эту колонку и по ней сортировать. Но это как изобретать велосипед (и на крайняк я что то такое и буду выдумывать). А есть ли готовые решения этой проблемы?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.04.2015, 23:05
Ответы с готовыми решениями:

Сортировка записей в Access
Как сделать сортировку по имени (от А до Я и от Я до А), а также по числам (от 1 до 1000 и от 1000 до 1)

Сортировка записей по двум параметрам
Всем привет. У меня следующая задача: я хочу отсортировать результаты по 2ум параметрам, т.е. есть таблица, и в ней есть столбцы: приоритет...

Сортировка символов по частоте
Подскажите, пожалуйста, правильно ли я делаю сортировку символов по частоте в порядке убывания? var orderedLetters = Mtr.GroupBy(x...

22
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
04.04.2015, 23:16
Цитата Сообщение от SergioXY Посмотреть сообщение
А есть ли готовые решения этой проблемы?
Первый возникший вопрос - источник грида?
0
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 20
05.04.2015, 11:13  [ТС]
DATAVIEW

Добавлено через 11 часов 43 минуты
Короче ничего толкового я не нашел и пришлось делать самому. Каряво, но работает.

1 добавил в таблице датасєта ещё одну колонку, назвал - frequency (частота)
2 путём перебора значений в datagridview узнал количество "Васей", "Петей" и "Колей" ну и других ребят...
3 проставил это количество напротив нужных записей в колонке frequency (частота)
4 отсортировал датавью по двум колонкам DVR.Sort = "frequency DESC, Name DESC";

Вроде работает, правда при сортировке, почему то как не крути, а один человек, например "Вася" с номером 14, вместо того что бы быть вверху отсортированного списка со всеми "васями", болтается внизу, там где люди в единственном экземпляре с номером 1. И дело вовсе не в "Васе", если добавить в мой список ещё немножко людей, тогда найдётся какой то "Петя", который по здравому смыслу, должен бы возглавлять таблицу (так как их "Петей" много), а он снова где то внизу списка. Я чего-то на 99,99% что это не я виноват, а Microsoft.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
05.04.2015, 12:28
Цитата Сообщение от SergioXY Посмотреть сообщение
ничего толкового я не нашел
Толковые, как вы выразились, способы есть. Однако я задал вам вопрос, и получил на него невнятный ответ
Цитата Сообщение от SergioXY Посмотреть сообщение
DATAVIEW
А теперь вы говорите, что источник-то - вот он
Цитата Сообщение от SergioXY Посмотреть сообщение
таблице датасєта
Так что у вас является ИСТОЧНИКОМ ДАННЫХ??? Таблица? Тогда используйте LINQ to DataSet, самый толковый способ.
0
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 20
05.04.2015, 15:09  [ТС]
у меня датасет DS, в нём таблица - shoeslist
изначально мой датагридвью сидит на DS.shoeslist, но это пока я не настроил колонки датагридавью,
но потом я делаю DataView на основании той же таки таблицы DS.shoeslist. Зачем я это делаю? Просто к DataView я могу делать фильтрацию и сортировку. Так это выглядит:

DataView DV = new DataView(DS.shoeslist);// DataView берём из той же таки таблицы, о которой мы говорим shoeslist
DV.RowFilter = sFilter;// фильтрация
DV.Sort = "OurNumber ASC"; // сортировка
DGV_inventory.DataSource = DV; // меняем источник

Добавлено через 12 минут
И ещё посмотрел я на LINQ to DataSet, посмотрел примеры и так и не нашел каким боком это может помочь мне отсортировать записи по частоте встречаемости.

Добавлено через 2 минуты
нужно так:
Вася 5
Вася 5
Вася 5
Вася 5
Вася 5
Коля 3
Коля 3
Коля 3
Петя 1
Саша 1

Добавлено через 4 минуты
А сейчас у меня уже получилось, но с "глючком", выглядит так:
Вася 5
Вася 5
Вася 5
Вася 5
Коля 3
Коля 3
Коля 3
Петя 1
Вася 5 // -спрашивается, а как этот "Вася 5" после сортировки сюда попал? С каких делов? Либо сортируй всё либо ничего - правильно?
Саша 1
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
05.04.2015, 15:09
Цитата Сообщение от SergioXY Посмотреть сообщение
у меня датасет DS, в нём таблица - shoeslist
Структуру таблицы покажите.
Цитата Сообщение от SergioXY Посмотреть сообщение
так и не нашел каким боком это может помочь мне отсортировать записи по частоте встречаемости.
Плохо смотрели.
0
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 20
05.04.2015, 15:41  [ТС]
Моё приложение реально большое и сложное. Но если Вы можете реально помочь, то я за 5 минут сделаю мини приложение, но с теми же запросами. Так пойдёт? Если конечно вас это не напрягает?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
05.04.2015, 15:54
Цитата Сообщение от SergioXY Посмотреть сообщение
приложение реально большое и сложное
Да не нужно мне ваше приложение (которое реально большое и сложное).
Мну нужно увидеть СТРУКТУРУ ТАБЛИЦЫ, то есть какие там столбцы, сколько их, типы данных в столбцах. Чтобы сделать свою такую же и показать пример.
0
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 20
05.04.2015, 16:22  [ТС]
Ну картинку сюда я так понял не вставишь. Поэтому опишу таблицу (shoeslist) вручную. Из тех полей, которые интересно рассматривать это поле ID (int) уникальное и поле ModelNumber (string). В реальности это не Васи и Коли, а модели обуви. Требуется отображать номер модели обуви в порядке покупаемости. Например эту модель наиболее часто в этом месяце покупали, значит все записи о ней должны быть сгруппированы и идти в датагридвью первыми, далее другая группа, та которая продавалась хуже и так далее. Ну понятно, что там есть и другие поля, например размер обуви, но я их описывать не буду, так как это совсем не имеет значения. Таблица не сама по себе, а находится в датасете (DS). В таблице так же есть поле "Дата продажи" (DateTime), по этому полю я делаю фильтрацию, то есть хочу видеть записи только за определённый период. Как сделать фильтрацию? Взять из моей таблици DataView и прицепить к нему фильтр. И поменять источник данных у нашего датагридавью на наш фильтрованый DateView. Так это выглядит:
C#
1
2
3
4
 DataView DV = new DataView(DS.shoeslist);
 DV.RowFilter = sFilter; // фильтр
 DV.Sort = "OurNumber ASC";
 DGV_inventory.DataSource = DV;
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
05.04.2015, 16:31
Цитата Сообщение от SergioXY Посмотреть сообщение
отображать номер модели обуви в порядке покупаемости.
А что служит индексом покупаемости? Количество записей определенного вида товара, правильно? То есть, записи с большим количеством должны быть сначала, чем записей меньше, тем ниже в таблице они находятся. Все верно?
0
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 20
05.04.2015, 16:54  [ТС]
Да, именно так

Добавлено через 7 минут
Одна модель в этом месяце продалась 16 раз, следовательно эти 16 строк с этой моделью должны быть в самом вверху. Конечно, там есть и дополнительные поля, типа даты продажи, размер, но это не важно. Следующая модель обуви за данный период продалась 10 раз, значит следующие 10 строк посвящаются ей, ну и по ниспадающей.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
05.04.2015, 17:18
SergioXY, вот вам тестовый проект. В зависимости от состояния флажка данные выводятся либо как есть, либо в сгруппированном виде. Проверяйте, то ли это, что вам требовалось.
База данных в проекте уже есть, просто запускайте и смотрите как работает.
Вложения
Тип файла: rar OrederedTable.rar (481.8 Кб, 6 просмотров)
0
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 20
05.04.2015, 17:36  [ТС]
От беда, у меня C# express 2010. И здесь база на SQLite? Может мне студию поновее поставить?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
05.04.2015, 17:39
Цитата Сообщение от SergioXY Посмотреть сообщение
От беда, у меня C# express 2010.
А что вам Студия, смотрите реализацию класса для работы с БД и все.
Цитата Сообщение от SergioXY Посмотреть сообщение
И здесь база на SQLite?
Да, но можно применить любую. Меняете строку подключения, классы для работы с БД и все.
Цитата Сообщение от SergioXY Посмотреть сообщение
Может мне студию поновее поставить?
Ставьте 2013 Community, то что надо.
0
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 20
05.04.2015, 17:49  [ТС]
я так понял, вот та часть кода, что мне нужна...
DataTable orderedTable = table.AsEnumerable().OrderBy(row => row.Field<string>("ModelName")).CopyToDa taTable();
return orderedTable;
правда ещё не проверил, на работоспособность
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
05.04.2015, 18:06
Цитата Сообщение от SergioXY Посмотреть сообщение
та часть кода, что мне нужна...
Именно так. Всего одна строчка кода спасет отца русской демократии.
Цитата Сообщение от SergioXY Посмотреть сообщение
ещё не проверил, на работоспособность
А вы мой тестовый проект запустите на выполнение и увидите.
0
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 20
05.04.2015, 18:10  [ТС]
Проверил, ну сгруппировать по моделям этот код смог. А вот поставить сначала в списке самую большую группировку, потом поменьше и ещё меньше - этого не произошло...

Добавлено через 1 минуту
Тестовый не запустился, SQL не устанавливал, поругалось и всё. Вернее прога запустилась, но с базой работать отказалась.

Добавлено через 1 минуту
System.BadImageFormatException: Не удалось загрузить файл или сборку "System.Data.SQLite, Version=1.0.93.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139" либо одну из их зависимостей. Была сделана попытка загрузить программу, имеющую неверный формат.
Имя файла: 'System.Data.SQLite, Version=1.0.93.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139'
в OrederedTable.DBTest.GetDatatable(Boolea n ordered)
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
05.04.2015, 18:17
Цитата Сообщение от SergioXY Посмотреть сообщение
Тестовый не запустился
Ааа, ну да, самой либы-то там нет, она же у меня на машине стоит. Сейчас перезалью проект.

Добавлено через 2 минуты
Хотя нет, либа есть... Вы из моего архива распакуйте все, зайдите в папку Debug и запустите.
Цитата Сообщение от SergioXY Посмотреть сообщение
поставить сначала в списке самую большую группировку, потом поменьше и ещё меньше
Это как? Сейчас покажу скрины как она группирует.
Это то что требовалось?
Миниатюры
Сортировка по частоте записей   Сортировка по частоте записей  
0
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 20
05.04.2015, 18:34  [ТС]
Да у вас всё работает. А у меня только группирует этих Вась и Петь. А группировки по мере убывания не ставит... Значит работает ваш код. Проблеммка где-то у меня зарыта. Таблицы имеют связи, но я не думаю что это как то мешает сортировке. Правда поле "ModelName" по Expression взято из другой таблицы. Хотя с другой стороны я пробовал и по другим полям - то же самое. Хотя я вам благодарен - раз у вас работает, значит буду у себя искать...

Добавлено через 2 минуты
У вас просто DataTable, а у меня типизированный ДатаСэт - это может как то повлиять?
C#
1
2
3
4
5
 private void myXPButton2_Click_1(object sender, EventArgs e)
        {
            DataTable orderedTable = DS.shoesrow.AsEnumerable().OrderBy(row => row.Field<string>("ModelNumber")).CopyToDataTable();
            DGV_x.DataSource = orderedTable;
        }
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
05.04.2015, 18:37
Цитата Сообщение от SergioXY Посмотреть сообщение
У вас просто DataTable, а у меня типизированный ДатаСэт
Объект типа DataSet через свое свойство Tables возвращает коллекцию таблиц, в нем содержащихся. Можете обращаться к ним по имени или по индексу через индексатор.
Сделайте примерную БД того вида, как вы применяете и выложите, чтобы я сделал реальный пример на основе вашей БД.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.04.2015, 18:37
Помогаю со студенческими работами здесь

Комплексная сортировка по частоте и алфавиту
Всем привет :) Есть программа... #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include &lt;string&gt; #include...

Подскажите: сортировка слов по частоте
Здравствуйте.. Объясните пожалуйста, что делает данная строка sortedD = sorted(d.items(), key=operator.itemgetter(1), reverse=True) ...

Сортировка по убыванию данных по относительной частоте
Друзья, как выполнить сортировку по убыванию поступивших в richTextBox2 данных по относительной частоте? Т.е. по убыванию встречающихся...

Clojure Сортировка атомов списка по частоте появления
Помогите решить задачу: Есть список атомов. Написать программу, возвращающую список вида: первый элемент — атом исходного списка,...

Сортировка символов в строке по частоте их встречаемости
Помогите разобраться с кодом. Ошибка возникает на этапе суммирования частоты встречаемости символов. #include &lt;stdio.h&gt; #include...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru