2015-06-23 75 views
2

如何從List中檢索int值,它是它的最大數字,但仍小於我比較的X的值。小於X的列表中的最大值

Value = 10 

Example one: List = {1,4,6,8}; => number 8 biggest on list and smaller than 10 
Example two: List = {1,15,17,20}; => number 1 biggest on list and smaller than 10 

我正在嘗試使用Linq,但目前爲止沒有成功。

+0

找到Max是數組排序就像你的榜樣?如果是這種情況,您可以開始瀏覽列表,並在找到高於您的限制的值時停止。 –

回答

11

你可以只限制值,你用用Where條款獲得「最大」:

return myList.Where(x => x < 10).Max(); 
+1

這是一個,我錯誤地認爲你可以使用帶有表達式的'Max'重載,它在測試之後似乎返回'Max'是否小於所述值的布爾值。好地方@TimSchmelter – mattytommo

+0

問題是,var list = MyLoc.Where(s => s.CurrentLoc <10).Max();拋出一個錯誤:至少有一個對象必須實現IComparable。 – Tagyoureit

+0

@mattytommo:不是,['Enumerable.Max'](https://msdn.microsoft.com/en-us/library/bb535031(v = vs.95).aspx)的重載允許指定選擇器,所以你想從哪個值得到最大值。如果你指定'x <10',那麼你選擇了一個'bool',其中'true'比'false'更高,如果至少有一個值低於10,你會得到'true'。 –

3

您可以使用Where來篩選自己的價值觀,其小於10和使用Max以獲得最大的價值在他們喜歡;

var list = new List<int>{1, 15, 17, 20}; 
list.Where(s => s < 10).Max().Dump(); 

enter image description here

2

可以過濾項小於X,然後使用Max()如下

list.where(m => m <= x).Max(p => p);