Member 14800672 Ответов: 2

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


У меня есть список, в котором 4 объекта с тремя полями имеют следующее
Поля являются строковыми день, удостоверение личности int и String время
[0] Sunday  1    9:00 to 10:00
[1] Monday  1    9:00 to 10:00
[2] Sunday  1    9:00 to 10:00
[3] Monday  1    9:00 to 10:00


Я не хочу, чтобы выходные данные имели повторяющиеся значения, поэтому выходные данные должны быть такими

[0] Sunday  1    9:00 to 10:00
[1] Monday  1    9:00 to 10:00


Что я уже пробовал:

I tried list.Distinct(); but it's output remained the same.

MadMyche

Пожалуйста, используйте Improve Question виджет и добавить в определение класса для рассматриваемого объекта

Member 14800672

Я добавил типы полей в вопрос
Строковый день; пример: воскресенье
Int id; Пример: 1
Время строки; пример: с 9:00 до 10:00

2 Ответов

Рейтинг:
1

Maciej Los

Другой способ (в качестве альтернативы решению № 1) заключается в использовании GroupBy + Select

var distinctValues = listofvalues
    .GroupBy(x => new {Day = x.Day, Id = x.Id, Time = x.Time})
    .Select(grp => grp.First())
    .ToList();


Более короткая версия вышеизложенного:
var distinctValues = listofvalues
    .GroupBy(x => new {Day = x.Day, Id = x.Id, Time = x.Time}, (key, x) => x.FirstOrDefault())
    .ToList();


или использовать Метода tolookup()[^]
var distincts = listofvalues
		.ToLookup(c => new {Day = x.Day, Id = x.Id, Time = x.Time})
		.Select(g => g.First())
		.ToList();


George Swan

Большой ответ. Вы можете сделать свою более короткую версию еще короче, используя Кортеж вместо анонимного типа, поскольку они оба используют компаратор равенства по умолчанию для каждого свойства.
.Метод groupBy(х => У (Х.День, Х.Идентификатор х.Времени),(к,Х)=&ГТ;х.Метода firstordefault())

Maciej Los

- Спасибо, Джордж.
Использование кортежа-отличная идея!

Рейтинг:
0

Richard Deeming

Ваш объект должен быть реализован IEquatable<T>:
IEquatable<T> интерфейс (система) | Microsoft Docs[^]

Или вам нужно предоставить заказ IEqualityComparer<T> к Distinct метод:
Интерфейс IEqualityComparer<T> (System.Коллекции.Общая) | Майкрософт Документы[^]


Maciej Los

5ed!