[英]LINQ filter list and exclude MAX value
LINQ的新增功能,試圖弄清楚如何從列表中排除項目。 我有一個名稱及其位置級別的列表。 看起來像
Name ID Level
aaa 123 0
bbb 122 1
ccc 222 2
ddd 223 3
我正在嘗試做的是找出一種排除最高級別記錄的方法。 我正在重構一些使用for循環進行檢查的代碼,而我很難確定如何進行鏡像。
您的類型的確切結構尚不清楚,但類似以下內容:
list.OrderBy(x=>x.Level).Take(list.Count-1)
//其中x
是列表中的項目(原始)
應該為你工作。
如果您可能有多個MAX值,請使用Distinct (請參閱文檔中的示例以了解如何使用它)
如果集合中可能有多個重復值(包括非MAX值),則可以這樣做
list.OrderByDescending(x => x.Level);
var max = list.First();
var result = list.SkipWhile(x=>x == max);
最簡單的方法是:
var max = list
.Max(l => l.Level);
var listWithoutMax = list
.Where(l => l.Level != max);
這個小的代碼片段應該可以正常工作:
Int32 max = list.Max(x => x.Level);
List<MyObject> newList = list.Where(x => x.Level != max).ToList();
並且,如果您的列表包含多個具有最高級別值的元素,則將確保從中刪除所有這些元素。
您可以使用RemoveAll()
:
var result = list.RemoveAll(x => x.Level == list.Max(s => s.Level));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.