如何从 List中获取最接近的数字与 LINQ?
如何使用 LINQ 从 List
获取最接近的数字?
例如:
List<int> numbers = new List<int>();
numbers.Add(2);
numbers.Add(5);
numbers.Add(7);
numbers.Add(10)
我需要在列表中找到与数字 9 最接近的值。在本例中为 10。
如何使用 LINQ 来做到这一点?
How to get the closest number from a List<int>
with LINQ?
For example:
List<int> numbers = new List<int>();
numbers.Add(2);
numbers.Add(5);
numbers.Add(7);
numbers.Add(10)
I need to find the closest value in the list to number 9. In this case 10.
How can I do this with LINQ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
如果您使用 LINQ to Objects 并且列表很长,我会使用:
此方法是比 Anthony Pegram 建议的解决方案稍微复杂一些,但它的优点是您不必先对列表进行排序。这意味着您的时间复杂度为
O(n)
而不是O(n*log(n))
,内存使用量为O(1)
而不是O(n)
。If you use LINQ to Objects and the list is long, I would use:
This method is slightly more complex than the solution that Anthony Pegram suggested, but it has as advantage that you don't have to sort the list first. This means that you have a time complexity of
O(n)
instead ofO(n*log(n))
and a memory usage ofO(1)
instead ofO(n)
.如果你想使用 LINQ 来执行此任务,你可以像下面这样做。
If you want to use LINQ to perform this task, you can do it like below.
上面的解决方案最多都是
O(N)
。如果您有一个大列表并且多次执行此最近元素查询,则首先对列表进行排序 (
O(NlogN)
),然后使用List会更高效。每个查询的.BinarySearch
。与之前方法的O(kN)
相比,k
次查询的性能为O( (k+N)logN )
。The solutions above are all
O(N)
at best.If you have a big list and you perform this closest-element query multiple times, it would be more performant to sort the list first (
O(NlogN)
) and then useList<T>.BinarySearch
for each query. The performance fork
queries isO( (k+N)logN )
, in comparison toO(kN)
of the previous method.如今,还有一个很好且简单的选择:
These days there also exist a nice and simple option:
你可以进行二分查找。它是 C# 中的内置方法,可帮助您搜索最接近的数字。以下示例:https://msdn.microsoft。 com/en-us/library/y15ef976(v=vs.110).aspx
You could you the binary search. It is the build in method in c# that will help you search for the number closest. Here example: https://msdn.microsoft.com/en-us/library/y15ef976(v=vs.110).aspx
根据您使用的条件使用此获取最近的更低或更高。
Use this get nearest lower or Higher based on condition You used.