Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/104: Рейтинг темы: голосов - 104, средняя оценка - 4.88
13 / 13 / 7
Регистрация: 28.01.2012
Сообщений: 549
1

Убрать дубликаты из List

08.08.2014, 15:26. Показов 20141. Ответов 6
Метки нет (Все метки)

Есть класс

C#
1
2
3
4
5
class Hello {
public string IP;
public string Port;
 
}
и есть лист

C#
1
var lst = new List<Hello>()
можно ли с помощью DiStinct почистить от дублей, у которых одинаковые только IP ?

Добавлено через 1 минуту
Нашёл ответ, вот, если кому-то нужно будет:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Box
{
    public Box(int h,  int l, int w)
    {
        this.Height = h;
        this.Length = l;
        this.Width = w;
    }
    public int Height { get; set; }
    public int Length { get; set; }
    public int Width { get; set; }
}
 
 
class BoxEqualityComparer : IEqualityComparer<Box>
{
 
    public bool Equals(Box b1, Box b2)
    {
        if (b1.Height == b2.Height & b1.Length == b2.Length
                            & b1.Width == b2.Width)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.08.2014, 15:26
Ответы с готовыми решениями:

Не получается удалить дубликаты из list'a
Хочу сделать метод deletedub(), который удаляет из list (из string обязательно преобразовать в...

Посчитать дубликаты в List и вынести в двоичный массив
Нужно посчитать дубликаты в List, и вынести в двоичный массив . Как это сделать наиболее правильно?

Как удалить дубликаты списка файлов из List<string>?
1 - Собираю список файлов в List&lt;string&gt; После показываю его на консоль: private static readonly...

Убрать дубликаты в списке байт массивов
Есть список List байт массивов, как удалить из него все одинаковые элементы оставив только их...

6
868 / 718 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
08.08.2014, 15:37 2
hiphone,
Или при помощи linq
C#
1
var res = lst.GroupBy(x => x.IP).Select(x => x.First());
0
0 / 0 / 0
Регистрация: 07.06.2017
Сообщений: 2
13.07.2018, 19:29 3
XRoy, а можешь объяснить как это работает?
first выбирает первый элемент их списка, а что делает group? он разбивает элементы на группы по ключу,но как удаляются дубликаты?
0
Эксперт .NET
4959 / 3392 / 1423
Регистрация: 09.05.2015
Сообщений: 8,294
13.07.2018, 19:49 4
Цитата Сообщение от Haidel Посмотреть сообщение
но как удаляются дубликаты?
Берется только первый из группы Select(x => x.First())...
Но можно проще сделать через Distinct...
0
322 / 301 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
14.07.2018, 08:59 5
Цитата Сообщение от Haidel Посмотреть сообщение
он разбивает элементы на группы по ключу,но как удаляются дубликаты?
Они не удаляются из старого, а создается новый список без них. Любопытный способ

Цитата Сообщение от Someone007 Посмотреть сообщение
Но можно проще сделать через Distinct...
Как? Там же вроде одной строчкой не обойдется
0
Эксперт JS
6110 / 3636 / 1857
Регистрация: 14.06.2018
Сообщений: 6,499
14.07.2018, 13:58 6
Молодёжи поразвлекаться. Ещё способ - толкнуть в Set. Но он тоже требует реализации сравнения в классе.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Test_Distinct_IP
{
    class Hello
    {
        public string IP { get; set; }
        public string Port { get; set; }
 
        public override bool Equals(object obj)
        {
            var hello = obj as Hello;
            return hello != null &&
                   IP == hello.IP;
        }
 
        public override int GetHashCode() => IP == null ? 0 : IP.GetHashCode();
    }
 
    class HelloEqualityComparer : EqualityComparer<Hello>
    {
        public override bool Equals(Hello x, Hello y)
        {
            // Ссылочное равенство и null == null
            if (x == y)
                return true;
 
            if ((x == null && y != null) || (x != null && y == null))
                return false;
 
            return x.IP == y.IP;
        }
 
        public override int GetHashCode(Hello obj) => obj != null && obj.IP != null ? obj.IP.GetHashCode() : 0;
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            var lst = new List<Hello> {
                new Hello {IP = "192.168.0.1", Port = "80" },
                new Hello {IP = "192.168.0.2", Port = "80" },
                new Hello {IP = "192.168.0.1", Port = "80" },
                new Hello {IP = "192.168.0.1", Port = "81" },
                new Hello {IP = "192.168.0.2", Port = "85" },
                new Hello {IP = null, Port = null },
                null,
                new Hello {IP = "7", Port = "70" },
                null
            };
 
            var lst2 = lst.Distinct().ToList();
 
            foreach (var item in lst2)
            {
                Console.WriteLine($"{item?.IP} {item?.Port}");
            }
 
 
            lst2 = lst.Distinct(new HelloEqualityComparer()).ToList();
 
            foreach (var item in lst2)
            {
                Console.WriteLine($"{item?.IP} {item?.Port}");
            }
 
            lst2 = lst.GroupBy(h => h?.IP).Select(g => g.First()).ToList();
            foreach (var item in lst2)
            {
                Console.WriteLine($"{item?.IP} {item?.Port}");
            }
 
            // Через Set
            var lst3 = new HashSet<Hello>(lst);
 
            foreach (var item in lst3)
            {
                Console.WriteLine($"{item?.IP} {item?.Port}");
            }
 
            // Через Set с компаратором
            lst3 = new HashSet<Hello>(lst, new HelloEqualityComparer());
 
            foreach (var item in lst3)
            {
                Console.WriteLine($"{item?.IP} {item?.Port}");
            }
        }
    }
}
0
Заблокирован
16.07.2018, 17:16 7
используй метод Distinct()
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.07.2018, 17:16

Нужно написать программу, которая выводит дубликаты файлов. Дубликаты ищутся по хеш-сумме файла. Код на С#
Привет всем, прошу помощи в освоении C#, разобрался б в рабочем коде, не могу сам написать

Убрать уникальные значения в List
есть public struct S { public int M; public int CRC; ...

C# List<T> как убрать одинаковые элементы
Естьpublic static List&lt;string&gt; sFileName = new List&lt;string&gt;(); , заполненный из базы данных. Как...

Удалить дубликаты в List
Всех приветствую, Софт открывает текстовый файл и заносит его содержимое в List Текстовый файл...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.