使用LINQ获取数字列表中的下一个数字

3

我有一个数字列表如下:

var mylist = new List<double> {1, 5, 8, 10, 12};

如何获取一个特定数之后的数字。我想要一个 LINQ 表达式,比如输入 8,输出 10


2
如果我问12之后的数字应该是什么答案? - pero
@PetarRepac 12之后的数字并不重要,我会在条件语句中检查它。 - Vahid
3个回答

7
您可以使用以下内容:
double result = mylist.SkipWhile(n => n != 8).Skip(1).First();

2
他有一個雙精度列表,所以我建議在“Where”子句中使用 Math.Abs(n - 8) > 0.00001 - Ilya Ivanov
1
如果你运行这个程序并在12之后要求一个数字,你将会得到一个异常。 - pero
@PetarRepac 是的,它会生成异常。但是获取 FirstOrDefault() 将返回 0,这也是不正确的。 - Ulugbek Umirov
@IlyaIvanov 是的,对于非整数双精度浮点数来说是有意义的,但 OP 可以自己进行这个更改。 - Ulugbek Umirov

2

如果没有重复的数字,这个方法同样适用。

int index = mylist.IndexOf(8);

if (index != -1)
{
   double result = index == mylist.Count - 1 ? mylist[index] : mylist[index + 1];
}

谢谢Selman,这个答案相比Ulugbek给出的答案有什么性能优势吗? - Vahid
1
我不能说会有显著的差异,但当然最好的方法是测量。否则,请使用您认为更易读的方式。 - Selman Genç
1
据我所知,如果你将12作为输入,你将得到12作为返回值。没有性能优势。 - pero
我认为这个答案更直观,但是我在问题中要求了一个LINQ的答案。 - Vahid

1

这应该 工作

var mylist = new List<double> { 1, 5, 8, 10, 12 };
double p = 8;

var result = mylist.Where(x => x > p).Take(1).SingleOrDefault();

+1. 这几乎让使用LINQ解决问题失去了所有的乐趣。 - just.another.programmer
1
OP从未说过列表是有序的。 - pero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接