簡體   English   中英

如何使用Lambda從列表中獲取最后的x條記錄

[英]How to get last x records from a list with Lambda

我有作為字符串列表,我刪除每個重復項,現在我想過濾它以獲得最后5條記錄。 我怎樣才能做到這一點?

到目前為止我得到了什么

 List<string> query = otherlist.Distinct().Select(a => a).ToList();

你不需要.Select(a => a) 多余的。

你可以通過跳過其余的來獲得最后5條記錄

List<string> query = otherlist.Distinct().ToList();
List<string> lastFive = query.Skip(query.Count-5).ToList();

編輯以滿足非列表輸入,現在處理IEnumerable<T>檢查這是否是IList<T> ; 如果沒有它通過緩存它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];
        }
    }

這個怎么樣?

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

編輯:這是整個事情 -

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

另請注意,如果您最后有一個ToList()調用,則不應該將其稱為query ,因為它不再是查詢,它已被評估並轉換為列表。 如果只需要迭代,可以省略ToList()調用並將其保留為IEnumerable

var count=list.Count();
var last5=list.Skip(count-5);

編輯:

我錯過了數據是List <T>。 對於IEnumerable <T>,這種方法會更好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM