2017-04-22 34 views
1

我有這樣的如何在lambda中搜索值?

public List<int> Numbers = new List<int>() {25,50,75,100,150,200,250,300,400,500}; 

我要搜索此列表中的號碼,值的列表,以便在lambda它很容易與精確匹配

Numbers.where(x => x==NumberToSearch); 

,但該名單是一個價格表依賴的用戶數量,許多時候用戶可以捕獲不在列表中的數字,例如144.

如何檢索最近的項目大於,例如;爲144檢索數值列表中的值150的項目?

對不起,我的英語和謝謝!

+0

對不起,我的意思是最接近的項目大於 –

回答

2

如果在列表中的編號按升序進行排序,使用

var nextHigherPrice = prices.FirstOrDefault(p => p >= userEnteredPrice); 

當用戶進入以上,最高價格這將返回零。

這並不理想,因爲它沒有充分利用被排序的數字。這將是更快地使用binary search

index = prices.BinarySearch(userEnteredPrice); 
if (index < 0) { 
    index = ~index; // invert to get the insertion index 
} 
+0

謝謝我將排序,然後做到這一點 –

0

如果未排序列表中,您可以排序並使用@ dasblinkenlight的答案,或者用這個:

var result = Numbers.Where(x => x >= NumberToSearch).Min(); 

注意:它會拋出一個InvalidOperationException如果沒有號碼>= NumberToSearch

+0

這我想,謝謝你 –

0
var result = Numbers.where(x => x >= numberToSearch).Sort().FirstOrDefault(); 

如果用戶輸入144,則該列表將排序開始於150 FirstOrDefault()將選擇150是在該列表中的第一項,並將它指定結果。