[英]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.