C# LINQ. Оставить последнее значение после Disticnt()
List<string> list = new List<string>();
list.Add("Water");
list.Add("John");
list.Add("Drinks");
list.Add("Water");
List<string> b = new List<string>();
b.AddRange(list.Distinct());
После обработки выходит результат Water John Drinks, а нужно John Drinks Water.
Я хочу чтобы Джон Пил воду, а не чтобы Водный Джон Пил)
Сортировка листа - не вариант, лист должен выводить элементы в том порядке, в котором вошли.
Ответы (1 шт):
Автор решения: A K
→ Ссылка
жаль пока доступа к коду не имею, но мне пришла мысль попробовать перевернуть лист, провести distinct и перевернуть обратно
Гм, ну вроде работает как запрашивали, да:
private static List<string> LastDup(List<string> list)
{
var copy = list; // Не будем модифицировать/портить входные данные
copy.Reverse();
var result = new List<string>();
result.AddRange(list.Distinct());
result.Reverse();
return result;
}
Но мне всё же нравится больше простой вариант за проход list в один обход:
private static List<string> LastDup(List<string> list)
{
var result = new List<string>();
foreach (var element in list)
{
if (result.Contains(element))
{
result.Remove(element);
}
result.Add(element);
}
return result;
}