powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Выбрать уникальные элементы из List<T>
9 сообщений из 9, страница 1 из 1
Выбрать уникальные элементы из List<T>
    #39935162
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иду по списку файлов, заполняю лист, но в список попадают неуникальные элементы типа

Folder1, Subfolder11
Folder1, Subfolder11
Folder1, Subfolder11
Folder1, Subfolder12
Folder2, Subfolder21
Folder2, Subfolder21

Как не добавлять или как после заполнения выбрать только уникальные пары?


Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
   public class FileList
    {
        public string Folder { get; set; }
        public string SubFolder { get; set; }
        public int Total { get; set; } = 0;
    }

var list = new List<FileList>();

...
var fileList = new FileList();
list.Add(fileList);
...
...
Рейтинг: 0 / 0
Выбрать уникальные элементы из List<T>
    #39935173
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил: дописал свой компарер, сравнивающий объекты по двум полям
...
Рейтинг: 0 / 0
Выбрать уникальные элементы из List<T>
    #39935176
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

Код: sql
1.
2.
3.
var dlist = from el in fileList
              group by el.Folder into g
              select g;
...
Рейтинг: 0 / 0
Выбрать уникальные элементы из List<T>
    #39935183
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если в объекте нет полей ссылочного типа, можно сделать в виде стуктуры, там побитовая эквивалентность будет работать прямо из коробочки.
Для уникальности нужно использовать HashSet\Set, а не List, это будет значительно быстрее, так как алгоритмы логорифмические
...
Рейтинг: 0 / 0
Выбрать уникальные элементы из List<T>
    #39935236
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
Ролг Хупин,

Код: sql
1.
2.
3.
var dlist = from el in fileList
              group by el.Folder into g
              select g;



Надо уникальность оп двум полям: Folder, SubFolder.

Кстати, как посчитать количество уникальных пар и проставить в поле Total ?
...
Рейтинг: 0 / 0
Выбрать уникальные элементы из List<T>
    #39935263
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes
если в объекте нет полей ссылочного типа, можно сделать в виде стуктуры, там побитовая эквивалентность будет работать прямо из коробочки.
Для уникальности нужно использовать HashSet\Set, а не List, это будет значительно быстрее, так как алгоритмы логорифмические


А как насчет override Equals и GetHashCode для FileList и заставить каким-либо образом, чтобы HashSet при определении уникальности добавляемого элемента использовал именно переопределенные методы?
...
Рейтинг: 0 / 0
Выбрать уникальные элементы из List<T>
    #39935265
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

ну и что вам мешает?

Код: sql
1.
2.
3.
4.
5.
6.
var dlist = from el in list
   group el by new {el.Folder, el.SubFolder} into g
   select g;


Console.WriteLine(dlist.Count().ToString());
...
Рейтинг: 0 / 0
Выбрать уникальные элементы из List<T>
    #39935273
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
felix_ff
Ролг Хупин,

ну и что вам мешает?

Код: sql
1.
2.
3.
4.
5.
6.
var dlist = from el in list
   group el by new {el.Folder, el.SubFolder} into g
   select g;


Console.WriteLine(dlist.Count().ToString());



Это понятно, это общее количесвто элементов в результирующем списке.
А мне хотелось бы так
для исходного
Folder1, Subfolder11
Folder1, Subfolder11
Folder1, Subfolder11
Folder1, Subfolder12
Folder2, Subfolder21
Folder2, Subfolder21

получить типа такого
Folder1, Subfolder11, 3
Folder1, Subfolder12, 1
Folder2, Subfolder21, 2
...
Рейтинг: 0 / 0
Выбрать уникальные элементы из List<T>
    #39935276
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 class foo { public string A; public string B; }
 List<foo> list = new List<foo>();

 list.Add(new foo() { A = "Folder1", B = "Subfolder11" });
 list.Add(new foo() { A = "Folder1", B = "Subfolder11" });
 list.Add(new foo() { A = "Folder1", B = "Subfolder11" });
 list.Add(new foo() { A = "Folder1", B = "Subfolder12" });
 list.Add(new foo() { A = "Folder2", B = "Subfolder21" });
 list.Add(new foo() { A = "Folder2", B = "Subfolder21" });

 var dlist = from el in list
             group el by new { el.A, el.B } into g
             select new { g, cnt = g.Count() };

 foreach (var elem in dlist) {
    Console.WriteLine(string.Format("{0} - {1}", elem.g.Key, elem.cnt));
 }
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Выбрать уникальные элементы из List<T>
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]