如果您使用LINQ to Objects并且列表很长,我将使用:
List<int> list = new List<int> { 2, 5, 7, 10 };
int number = 9;
int closest = list.Aggregate((x,y) => Math.Abs(x-number) < Math.Abs(y-number) ? x : y);
这种方法比Anthony Pegram建议的解决方案稍微复杂一些,但是它的优点是您不必先对列表进行排序。这意味着您的时间复杂度为,O(n)
而O(n*log(n))
内存使用量O(1)
为O(n)
。