如何在lambda中搜索值?

时间:2017-04-22 00:44:06

标签: c# list 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.

如何检索最接近的项目,例如; for 144检索Number列表中的项目值为150?

对不起我的英文,谢谢!

3 个答案:

答案 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这是列表中的第一项并将其分配给结果。