Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.85/47: Рейтинг темы: голосов - 47, средняя оценка - 4.85
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676

Убрать уникальные значения в List

22.01.2019, 09:52. Показов 9743. Ответов 73
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть
C#
1
2
3
4
5
        public struct S
        {
            public int M;
            public int CRC;
        }
нужно посредством Sort() / foreach / OrderBy() / GroupBy() убрать все уникальные значения по CRC, чтобы остались любые повторяющиеся и можно было прочитать все значения М.
то есть из
C#
1
{ 1, 7, 12, 8, 12, 9, 3, 4, 3, 12, 17, 14, 0 }
нужно получить
C#
1
{ 12, 12, 3, 3, 12 }
я третий день ковыряюсь с Sort() / OrderBy() / GroupBy() и совсем не вкуриваю как они работают.
Из идей была только - сначала с помощью Sort() получить упорядоченную последовательность, а потом в цикле проверять совпадение текущего элемента с предыдущим и если они совпали - обрабатывать их. Но Sort() нет для struct, поэтому пока залип на месте.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.01.2019, 09:52
Ответы с готовыми решениями:

Уникальные значения столбца А по сравнению со столбцом С и уникальные значения в столбце С по сравнению с А?
Ребята всем привет, как реализовать макросом? Есть два столбца А и С в каждом списки наименований.Как вывести в столбцы F и H(либо на...

Перенести значения из одного List<T> в другой List
Добрый вечер, возможно глупы вопрос, но он привел меня в замешательство. Как копировать значения одного List&lt;T&gt; в другой...

Уникальные значения
Приветствую, есть таблица с 6 столбцами, нужно выбрать все 6 столбцов,но только те данные, где в пером столбце уникальные значения как...

73
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
23.01.2019, 10:34  [ТС]
Студворк — интернет-сервис помощи студентам
Кстати вот еще пример, ранее выложенный файл bits0.7z создавался в ветке
C#
1
2
3
4
5
6
7
8
For(dimIdxStart, dimIdxEnd, y =>
{
    if (Hash64 == DimBitsSN[y].Hash64)
    {
        strout.Add(Hash64.ToString());
        countX++;
    }
});
Размер файла 90339 байт.
А созданный такой же файл с применением кода
C#
1
2
3
4
5
6
7
8
                    var q = DimBitsSN.GroupBy(x => x.Hash64).Where(g => g.Count() > 1).Select(g => g);
                    foreach (var m in q)
                    {
                        foreach (var mi in m)
                        {
                            strout.Add(mi.Hash64.ToString());
                        }
                    }
Весит 1749471 байт и в основной части состоит из строк с нулём.
0
HF
 Аватар для HF
1342 / 926 / 202
Регистрация: 09.09.2011
Сообщений: 2,751
Записей в блоге: 2
23.01.2019, 10:36
Цитата Сообщение от belalugoci Посмотреть сообщение
Как ни странно, но q это IGrouping, а вот mi (из примера ниже) уже DimBitsS. (в картинке пруф)
Как ни странно, но если я беру код из 6го сообщения (структура + linq), то там нет и даже визуально не может быть такого. Что и приводит к мысли что вы ещё что-то где-то делаете и результат другой (а не тот который в теме описан).
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
23.01.2019, 10:36  [ТС]
Цитата Сообщение от kolorotur Посмотреть сообщение
именно это он и делает
больше и не требуется, с парами я буду работать сам потом.

Цитата Сообщение от kolorotur Посмотреть сообщение
а на деле надо дополнительно составить пары
нет

Цитата Сообщение от kolorotur Посмотреть сообщение
Или просто подсчитать количество пар?
нет
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
23.01.2019, 10:43
Цитата Сообщение от belalugoci Посмотреть сообщение
нет
Цитата Сообщение от belalugoci Посмотреть сообщение
нет
Ну как же вам тогда помочь, если вы не говорите фактическую задачу?
Разумеется тогда любой ответ будет неправильным.

Добавлено через 1 минуту
Цитата Сообщение от belalugoci Посмотреть сообщение
больше и не требуется
Раз больше и не требуется, тогда почему вы выше написали:
Цитата Сообщение от belalugoci Посмотреть сообщение
Неправильно работает
?
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
23.01.2019, 11:30  [ТС]
Цитата Сообщение от HF Посмотреть сообщение
Как ни странно, но если я беру код из 6го сообщения (структура + linq), то там нет и даже визуально не может быть такого. Что и приводит к мысли что вы ещё что-то где-то делаете и результат другой (а не тот который в теме описан).
Не знаю что сказать. Ничего хитрого в программе нет.

Добавлено через 10 минут
Цитата Сообщение от kolorotur Посмотреть сообщение
Ну как же вам тогда помочь, если вы не говорите фактическую задачу?
она не отличается от задачи в теме: если массив структур DimBitsS (описание выше), где нужно по полю Hash64 отфильтровать так, чтобы остались только неуникальные значения.

Цитата Сообщение от kolorotur Посмотреть сообщение
Раз больше и не требуется, тогда почему вы выше написали:
есть автомат:
А-Б-В
на выходе дает последовательность Г
меняем Б на Д, но на выходе не получаем Г.
Вывод один - Д не делает тоже что и Б.
В моём условии есть ошибка, она в том, что мне для точного сравнения Б и Д нужно ещё кое что сделать, но даже это не делая я могу предсказать порядок значений и так получается что должно быть <4224 а на деле >500000, что не соответствует действительности, так как всех значений 1 млн, то есть не может быть 50% неуникальных значений (тем более групп).
0
HF
 Аватар для HF
1342 / 926 / 202
Регистрация: 09.09.2011
Сообщений: 2,751
Записей в блоге: 2
23.01.2019, 11:36
Цитата Сообщение от belalugoci Посмотреть сообщение
она не отличается от задачи в теме: если массив структур DimBitsS (описание выше), где нужно по полю Hash64 отфильтровать так, чтобы остались только неуникальные значения.
И эта задача была решена в первых же сообщениях. У вас что-то не сходится дальше, уже по вашей дальнейшей задаче и тут или нужна новая постановка или больше условий и примеров. Но первоначальную задачу мы вам помогли решить. Она работает. Фильтр точно создаёт DimBitS массив "только неуникальных значений Hash64".
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
23.01.2019, 11:47  [ТС]
Цитата Сообщение от HF Посмотреть сообщение
Фильтр точно создаёт DimBitS массив "только неуникальных значений Hash64".
Ок. Как к нему обращаться и как посчитать число его элементов?
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
23.01.2019, 11:50  [ТС]
Цитата Сообщение от HF Посмотреть сообщение
Фильтр точно создаёт DimBitS массив "только неуникальных значений Hash64".
и как объяснить то, что q не является DimBitsS?
Миниатюры
Убрать уникальные значения в List  
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
23.01.2019, 12:12
Цитата Сообщение от belalugoci Посмотреть сообщение
Убрать уникальные значения в List
Честно говоря, всю тему не читал. Пишу по ТЗ (хотя может это и не надо уже).
C#
1
2
3
4
IEnumerable<S> listS = .....; // входная последовательность.
var groupList =  listS.GroupBy(s => s.CRC); // группировка по CRC
var uniqueCRC = groupList.When(gr => gr.Count()==1).Select(gr => gr.Key).ToList(); // Получение списка уникальных CRC
var notUniqueS = listS.When(s => uniqueCRC.IndexOf(s.CRC) < 0); // Получение последовательности S с неуникальными CRC
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
23.01.2019, 12:18  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Пишу по ТЗ
Только сейчас заметил, в названии темы ошибка, не в List, а в struct[]
0
HF
 Аватар для HF
1342 / 926 / 202
Регистрация: 09.09.2011
Сообщений: 2,751
Записей в блоге: 2
23.01.2019, 12:19
Цитата Сообщение от belalugoci Посмотреть сообщение
и как объяснить то, что q не является DimBitsS?
Объяснить тем что вы не совсем хорошо знаете язык или LINQ . Вам чётко сказали написать SelectMany, а вы написали Select. Разумеется там другой результат/тип.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
23.01.2019, 12:20  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
хотя может это и не надо уже
актуально. радует скорость работы, поэтому надо осилить.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
23.01.2019, 12:32  [ТС]
Цитата Сообщение от HF Посмотреть сообщение
Вам чётко сказали написать SelectMany, а вы написали Select. Разумеется там другой результат.
Ок-ок, написал. Результат смотрите во вложении, он сильно отличается от ранее вложенного файла. Раз появилась такая куча нулей и только в самом конце хэши, то подозреваю запрос что-то делает не до конца.
А вот если руками удалить из этого файла все строки с нулём, то мы получим 8256 "парных" хэшей. Ок. Пусть даже это будет верным, а мои старые данные ошибочными (это я проверю позднее). Но в данный конкретный момент var q всё ещё даёт неправильный результат.
Можно конечно написать так:
C#
1
2
3
4
5
6
7
8
9
                    var q = DimBitsSN.GroupBy(x => x.Hash64).Where(g => g.Count() > 1).SelectMany(g => g);
                    foreach (var m in q)
                    {
                        if (m.Hash64>0)
                        {
                            strout.Add(m.Hash64.ToString());
                            countX++;
                        }
                    }
и тогда мы получим вот такой вывод результата:
count()=532544 : countX=8256 : 00:00:00.7727454
то есть в q у нас 532544 элемента, а в действительности 8256.
Вложения
Тип файла: 7z bits0.7z (32.9 Кб, 2 просмотров)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
23.01.2019, 12:38
Цитата Сообщение от belalugoci Посмотреть сообщение
Только сейчас заметил, в названии темы ошибка, не в List, а в struct[]
Это не важно - будет работать с любой последовательностью.
Цитата Сообщение от belalugoci Посмотреть сообщение
актуально. радует скорость работы, поэтому надо осилить.
Не проверял. Скорее всего будет зависеть от соотношения уникальных-неуникальных. Проверьте на реальном наборе данных.
0
HF
 Аватар для HF
1342 / 926 / 202
Регистрация: 09.09.2011
Сообщений: 2,751
Записей в блоге: 2
23.01.2019, 12:39
Цитата Сообщение от belalugoci Посмотреть сообщение
if (m.Hash64>0)
"Капец какой-то."
Вам нужен массив без нулевых хэшей что ли? Тогда достаточно добавить условие и оно сделает тоже самое, только уже не нужно будет иметь всяких strout.

Code
1
var q = DimBitsSN.GroupBy(x => x.Hash64).Where(g => g.Count() > 1).SelectMany(g => g);
обновляем до
Code
1
var q = DimBitsSN.GroupBy(x => x.Hash64).Where(g => g.Count() > 1).SelectMany(g => g).Where(g => g.Hash64 > 0);
А если ещё и нужно сразу сравнить с каким-то мистическим Hash64, то можете даже обновить на:
Code
1
var q = DimBitsSN.GroupBy(x => x.Hash64).Where(g => g.Count() > 1).SelectMany(g => g).Where(g => g.Hash64 > 0 && g.Hash64 == mysticHash64);
А если нужно создать сразу массив аналогичный strout, то сделать уже финальный селект!

C#
1
2
3
4
5
6
var q = DimBitsSN.GroupBy(x => x.Hash64)
    .Where(g => g.Count() > 1)
    .SelectMany(g => g)
    .Where(g => g.Hash64 > 0 && g.Hash64 == mysticHash64)
    .Select(g => g.Hash64)
    .ToArray();
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
23.01.2019, 12:47  [ТС]
Цитата Сообщение от HF Посмотреть сообщение
Вам нужен массив без нулевых хэшей что ли?
А откуда они, нули, взялись? В моём наборе данных их нет.

Цитата Сообщение от HF Посмотреть сообщение
Тогда достаточно добавить условие и оно сделает тоже самое, только уже не нужно будет иметь всяких strout.
strout - это просто List<string> для вывода в файл. Нужен только на этапе отладки.

Цитата Сообщение от HF Посмотреть сообщение
А если ещё и нужно сразу сравнить с каким-то мистическим Hash64
Что же в нём мистического, если это часть структуры? Или вы про сравнение DimBitsSN.Hash64 с просто Hash64? Это как раз сравнение в лоб каждый с каждым и в запросе это делать не нужно, ведь суть запроса именно в том, чтобы такую проверку исключить.

Цитата Сообщение от HF Посмотреть сообщение
А если нужно создать сразу массив аналогичный strout, то сделать уже финальный селект!
Спасибо, это не нужно.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
23.01.2019, 12:49
Цитата Сообщение от HF Посмотреть сообщение
C#
1
var q = DimBitsSN.GroupBy(x => x.Hash64).Where(g => g.Count() > 1).SelectMany(g => g).Where(g => g.Hash64 > 0);
Поскольку элементы группируются по хэшу, лучше исключить нули на уровне групп, т.к. ключ и будет хэшем:
C#
1
var q = DimBitsSN.GroupBy(x => x.Hash64).Where(g => g.Key > 0 && g.Count() > 1).SelectMany(g => g);
0
HF
 Аватар для HF
1342 / 926 / 202
Регистрация: 09.09.2011
Сообщений: 2,751
Записей в блоге: 2
23.01.2019, 12:53
Цитата Сообщение от belalugoci Посмотреть сообщение
А откуда они, нули, взялись? В моём наборе данных их нет.
Ок, не "нули", а "ноли". В аттаче у вас просто "0" в строках. Ноли.
Цитата Сообщение от kolorotur Посмотреть сообщение
Поскольку элементы группируются по хэшу, лучше исключить нули на уровне групп, т.к. ключ и будет хэшем:
Да, я в курсе. Сделал это только ради ТС. Пошагово. А то у него потом ещё окажется условие. Проще будет строчку удалить из примера.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
23.01.2019, 12:58  [ТС]
Цитата Сообщение от HF Посмотреть сообщение
Ок, не "нули", а "ноли". В аттаче у вас просто "0" в строках. Ноли.
Не понял вашей шутки. Нулей нет вообще в исходных данных, они появляются на этапе выборки в q, поэтому их попадание в результат никак не может считаться правильным.

Цитата Сообщение от kolorotur Посмотреть сообщение
лучше исключить нули на уровне групп
А можно изначально не генерировать нули чтобы их потом не пришлось исключать?

Цитата Сообщение от HF Посмотреть сообщение
А то у него потом ещё окажется условие
Какое условие? Задача не меняется с самого начала. Я даже явно показал и доказал ошибку в показанном коде, но у вас какие-то ужимки и придирки почему-то лично ко мне.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
23.01.2019, 13:00
Цитата Сообщение от belalugoci Посмотреть сообщение
А можно изначально не генерировать нули чтобы их потом не пришлось исключать?
Да, достаточно вставить вызов Where с соответствующей проверкой перед GroupBy.

Добавлено через 36 секунд
Ну или отсеивать еще на уровне считывания из файла.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.01.2019, 13:00

Уникальные значения
Здравствуйте. Вопрос по C#. У меня есть список (list) техники (Принтер, монитор и тд.). Так как я считываю данные из файла и неизвестно что...

Уникальные значения
Здравствуйте, подскажите пожалуйста: есть таблица с огромным количеством данных, мне необходимо в запросе отбирать уникальные значения по...

Уникальные значения в БД
Люди подскажите каким способом можно отлавливать ошибки в коде? когда допустим добавляешь значение в базу, а там уже есть такое значение и...

Excel найти уникальные значения из первого столбца и фильтровать - не брать пустые значения из 3 столбца
Ребят, помогите осуществить в коде VB в Excel. Сделал в самом доке, а как в коде на VB новичок. Нужно найти уникальные записи из первого...

DBLookupComboBox Уникальные значения
У меня есть DBLookupComboBox можно ли внем выводить только уникальные значения? Может свойство какое есть? Я не нашел Добавлено...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru