Как получить последние записи x из списка с Лямбдой

Я имею как Список строк с тем, куда я удаляю, каждый копирует, теперь я хочу отфильтровать его еще больше для получения последних 5 записей. Как я могу сделать это?

Что я получил до сих пор

 List<string> query = otherlist.Distinct().Select(a => a).ToList();
8
задан Cœur 24 January 2017 в 17:28
поделиться

4 ответа

Вам не нужен .Select (a => a) . Это избыточно.

Вы можете получить последние 5 записей, пропустив остальные, например

List<string> query = otherlist.Distinct().ToList();
List<string> lastFive = query.Skip(query.Count-5).ToList();
10
ответ дан 5 December 2019 в 08:50
поделиться

edit для обслуживания входных данных, не вявляющихся списками, теперь обрабатывает IEnumerable и проверяет, если это IList; если нет, он буферизует его через ToList(), что помогает гарантировать, что мы читаем данные один раз (а не . Count() и . Skip(), который может считывать данные несколько раз).

Поскольку это список, я был бы склонен написать метод расширения, который использует его в полной мере:

    public static IEnumerable<T> TakeLast<T>(
           this IEnumerable<T> source, int count)
    {
        IList<T> list = (source as IList<T>) ?? source.ToList();
        count = Math.Min(count, list.Count);
        for (int i = list.Count - count; i < list.Count; i++)
        {
            yield return list[i];
        }
    }
5
ответ дан 5 December 2019 в 08:50
поделиться
var count=list.Count();
var last5=list.Skip(count-5);

ПРАВКА:

Я пропустил, что данные List . Такой подход был бы лучше для IEnumerable

0
ответ дан 5 December 2019 в 08:50
поделиться

Как насчет этого?

var lastFive = list.Reverse().Take(5).Reverse();

edit: here's the whole thing -

var lastFiveDistinct = otherlist.Distinct()
                                .Reverse()
                                .Take(5)
                                .Reverse()
                                .ToList();

Также обратите внимание, что вы не должны называть его query, если у вас есть вызов ToList() в конце, потому что тогда это уже не запрос, он был оценен и превращен в список. Если он нужен только для итерации, можно пропустить вызов ToList() и оставить его как IEnumerable.

4
ответ дан 5 December 2019 в 08:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: