我有一个包含这样的值的列表
public List<int> Numbers = new List<int>() {25,50,75,100,150,200,250,300,400,500};
我想在这个列表中搜索一个数字,所以在lambda中它很容易与完全匹配
Numbers.where(x => x==NumberToSearch);
但该列表是一个价格表,取决于用户数量,很多时候用户可以捕获不在列表中的数字,例如144.
如何检索最接近的项目,例如; for 144检索Number列表中的项目值为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
}
答案 1 :(得分:0)
如果列表没有排序,您可以对其进行排序并使用@dasblinkenlight的答案,或者使用它:
var result = Numbers.Where(x => x >= NumberToSearch).Min();
注意:如果没有数字InvalidOperationException
,它会抛出>= NumberToSearch
。
答案 2 :(得分:0)
var result = Numbers.where(x => x >= numberToSearch).Sort().FirstOrDefault();
如果用户输入144,则列表将从150开始排序。FirstOrDefault()
将选择150这是列表中的第一项并将其分配给结果。