finding closest value in an array

前端 未结 6 1900
情歌与酒
情歌与酒 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:34

    Performance wise custom code will be more useful.

    public static int FindNearest(int targetNumber, IEnumerable collection) {
        var results = collection.ToArray();
        int nearestValue;
        if (results.Any(ab => ab == targetNumber))
            nearestValue = results.FirstOrDefault(i => i == targetNumber);
        else{
            int greaterThanTarget = 0;
            int lessThanTarget = 0;
            if (results.Any(ab => ab > targetNumber)) {
                greaterThanTarget = results.Where(i => i > targetNumber).Min();
            }
            if (results.Any(ab => ab < targetNumber)) {
                lessThanTarget = results.Where(i => i < targetNumber).Max();
            }
    
            if (lessThanTarget == 0) {
                nearestValue = greaterThanTarget;
            }
            else if (greaterThanTarget == 0) {
                nearestValue = lessThanTarget;
            }
            else if (targetNumber - lessThanTarget < greaterThanTarget - targetNumber) {
                nearestValue = lessThanTarget;
            }
            else {
                nearestValue = greaterThanTarget;
            }
        }
        return nearestValue;
    }
    

提交回复
热议问题