Search code examples
c#listlinqenumerationclosest

C# linq list find closest numbers


I have a list of numbers and I want to find closest four numbers to a search number.

For example if the search number is 400000 and the list is: {150000, 250000, 400000, 550000, 850000, 300000, 200000), then the closest 4 numbers would be:

{300000, 400000, 250000, 550000}

Any help or suggestion would be appreciated.


Solution

  • You can use OrderBy to order the list by the absolute value of the difference between each item and your search term, so that the first item in the ordered list is closest to your number, and the last item is furthest from the number. Then you can use the Take extension method to take the number of items you need:

    var list = new List<long> {150000, 250000, 400000, 550000, 850000, 300000, 200000};
    var search = 400000;
    var result = list.OrderBy(x => Math.Abs(x - search)).Take(4);
    Console.WriteLine(string.Join(", ", result));
    

    Output: {400000, 300000, 250000, 550000}