В С# есть ли способ найти максимальное число из трех чисел?

Как и Math.Max, но принимает 3 или params int?

спасибо

Ответ 1

Ну, вы можете просто называть это дважды:

int max3 = Math.Max(x, Math.Max(y, z));

Если вы обнаружите, что делаете это много, вы всегда можете написать свой собственный вспомогательный метод... Я был бы достаточно счастлив, увидев это в моей базе кода один раз, но не регулярно.

(Обратите внимание, что это, скорее всего, будет более эффективным, чем ответ Andrew LINQ, но, очевидно, чем больше элементов, тем более привлекательным является подход LINQ.)

EDIT: подход "лучший из обоих миров" может состоять в том, чтобы иметь собственный набор методов в любом случае:

public static class MoreMath
{
    // This method only exists for consistency, so you can *always* call
    // MoreMath.Max instead of alternating between MoreMath.Max and Math.Max
    // depending on your argument count.
    public static int Max(int x, int y)
    {
        return Math.Max(x, y);
    }

    public static int Max(int x, int y, int z)
    {
        // Or inline it as x < y ? (y < z ? z : y) : (x < z ? z : x);
        // Time it before micro-optimizing though!
        return Math.Max(x, Math.Max(y, z));
    }

    public static int Max(int w, int x, int y, int z)
    {
        return Math.Max(w, Math.Max(x, Math.Max(y, z)));
    }

    public static int Max(params int[] values)
    {
        return Enumerable.Max(values);
    }
}

Таким образом, вы можете написать MoreMath.Max(1, 2, 3) или MoreMath.Max(1, 2, 3, 4) без накладных расходов на создание массива, но все же пишите MoreMath.Max(1, 2, 3, 4, 5, 6) для приятного чтения и согласования кода, когда вы не против накладных расходов.

Я лично считаю это более читаемым, чем явное создание массива подхода LINQ.

Ответ 2

Вы можете использовать Enumerable.Max:

new [] { 1, 2, 3 }.Max();

Ответ 3

Linq имеет функцию Max.

Если у вас есть IEnumerable<int>, вы можете вызывать это напрямую, но если вы требуете их в отдельных параметрах, вы можете создать такую ​​функцию:

using System.Linq;

...

static int Max(params int[] numbers)
{
    return numbers.Max();
}

Тогда вы можете называть его следующим образом: max(1, 6, 2), он допускает произвольное количество параметров.

Ответ 4

Как общий

public static T Min<T>(params T[] values) {
    return values.Min();
}

public static T Max<T>(params T[] values) {
    return values.Max();
}

Ответ 5

off, но вот формула для среднего значения.. на всякий случай кто-то ищет ее

Math.Min(Math.Min(Math.Max(x,y), Math.Max(y,z)), Math.Max(x,z));

Ответ 6

Предположим, что у вас есть List<int> intList = new List<int>{1,2,3}, если вы хотите получить максимальное значение. Вы могли бы сделать

int maxValue = intList.Max();

Ответ 7

Если по какой-либо причине (например, API инженеров-космонавтов) System.array не имеет определения для Max и у вас нет доступа к Enumerable, решение для Max (или Min) n значений:

public int Max(int[] values) {
    if(values.Length < 1) {
        return 0;
    }
    if(values.Length < 2) {
        return values[0];
    }
    if(values.Length < 3) {
       return Math.Max(values[0], values[1]); 
    }
    int runningMax = values[0];
    for(int i=1; i<values.Length - 1; i++) {
       runningMax = Math.Max(runningMax, values[i]);
    }
    return runningMax;
}