finding closest value in an array

前端 未结 6 1905
情歌与酒
情歌与酒 2020-11-27 20:56
int[] array = new int[5]{5,7,8,15,20};

int TargetNumber = 13;

For a target number, I want to find the closest number in an array. For example, whe

6条回答
  •  误落风尘
    2020-11-27 21:13

    If you're using .Net 3.5 or above LINQ can help you here:

    var closest = array.OrderBy(v => Math.Abs((long)v - targetNumber)).First();
    

    Alternatively, you could write your own extension method:

    public static int ClosestTo(this IEnumerable collection, int target)
    {
        // NB Method will return int.MaxValue for a sequence containing no elements.
        // Apply any defensive coding here as necessary.
        var closest = int.MaxValue;
        var minDifference = int.MaxValue;
        foreach (var element in collection)
        {
            var difference = Math.Abs((long)element - target);
            if (minDifference > difference)
            {
                minDifference = (int)difference;
                closest = element;
            }
        }
    
        return closest;
    }
    

    Useable like so:

    var closest = array.ClosestTo(targetNumber);
    

提交回复
热议问题