如何从 List中获取最接近的数字与 LINQ?

发布于 2024-11-06 09:39:28 字数 273 浏览 2 评论 0原文

如何使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

眼中杀气 2024-11-13 09:39:28

如果您使用 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)

If you use LINQ to Objects and the list is long, I would use:

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);

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 of O(n*log(n)) and a memory usage of O(1) instead of O(n).

时光沙漏 2024-11-13 09:39:28

如果你想使用 LINQ 来执行此任务,你可以像下面这样做。

List<int> list = new List<int> { 2, 5, 7, 10 };
int number = 9;

// find closest to number
int closest = list.OrderBy(item => Math.Abs(number - item)).First();

If you want to use LINQ to perform this task, you can do it like below.

List<int> list = new List<int> { 2, 5, 7, 10 };
int number = 9;

// find closest to number
int closest = list.OrderBy(item => Math.Abs(number - item)).First();
太阳男子 2024-11-13 09:39:28

上面的解决方案最多都是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 use List<T>.BinarySearch for each query. The performance for k queries is O( (k+N)logN ), in comparison to O(kN) of the previous method.

日暮斜阳 2024-11-13 09:39:28

如今,还有一个很好且简单的选择:

List<int> list = new List<int> { 2, 5, 7, 10 };
int number = 9;

int min = list.Min(i => (Math.Abs(number - i), i)).i;

These days there also exist a nice and simple option:

List<int> list = new List<int> { 2, 5, 7, 10 };
int number = 9;

int min = list.Min(i => (Math.Abs(number - i), i)).i;
星光不落少年眉 2024-11-13 09:39:28

你可以进行二分查找。它是 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

红颜悴 2024-11-13 09:39:28

根据您使用的条件使用此获取最近的更低或更高。

 List<int> list = new List<int> { 2, 5, 7, 10 };
 int number = 9;
 var closest = list.Where(numbers => numbers > number).First();
 Console.WriteLine(closest);
 Console.ReadLine();

Use this get nearest lower or Higher based on condition You used.

 List<int> list = new List<int> { 2, 5, 7, 10 };
 int number = 9;
 var closest = list.Where(numbers => numbers > number).First();
 Console.WriteLine(closest);
 Console.ReadLine();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文