在c#中是否有一种方法可以找到最多3个数字?

Jam*_*oat 85 c#

像Math.Max但是需要3或者int的参数?

谢谢

And*_*are 140

你可以使用Enumerable.Max:

new [] { 1, 2, 3 }.Max();
Run Code Online (Sandbox Code Playgroud)

  • @MateenUlhaq它是`new int [] {1,2,3}`的简写.所以它是一个int类型的数组,由其内容隐式确定. (7认同)
  • 我不知道你可以使用`[]`创建一个Enumerable.俏皮. (2认同)

Jon*_*eet 126

好吧,你可以叫它两次:

int max3 = Math.Max(x, Math.Max(y, z));
Run Code Online (Sandbox Code Playgroud)

如果你发现自己做这个有很多,你可以编写自己的辅助方法......我会很愿意在我的代码库看到这一次,但不经常.

(请注意,这可能比安德鲁基于LINQ的答案更有效 - 但显然你拥有的元素越多,LINQ方法就越有吸引力.)

编辑:"两全其美"的方法可能是有一套自定义方法:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这样你就可以编写MoreMath.Max(1, 2, 3)MoreMath.Max(1, 2, 3, 4)不编写数组创建的开销,但是MoreMath.Max(1, 2, 3, 4, 5, 6)当你不介意开销时,仍然可以编写可读且一致的代码.

我个人发现它比LINQ方法的显式数组创建更具可读性.

  • 如果您问这样的问题,max函数的性能很可能是无关紧要的,那么可读性将占上风。 (2认同)
  • @Andrew:我认为在*one*地方读书是可以的.如果我不止一次(但每次仍然有3个参数),我可能宁愿编写一个自定义方法而不是使用LINQ方法.`MoreMath.Max(x,y,z)`比LINQ方法IMO更具可读性. (2认同)
  • @Navid:因为将其称为"Max(1,2,3)`将无缘无故地创建一个数组.通过为相对较少的参数提供一些重载,您可以使其更有效,而不会影响调用者的可读性. (2认同)

Bas*_*Bas 29

Linq具有Max功能.

如果你有,IEnumerable<int>你可以直接调用它,但如果你需要在单独的参数中,你可以创建一个这样的函数:

using System.Linq;

...

static int Max(params int[] numbers)
{
    return numbers.Max();
}
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样调用它:max(1, 6, 2)它允许任意数量的参数.

  • @naveen:当然,如果它使代码更清晰,并且你在多个地方使用它.为什么不? (4认同)
  • 是的,根据我编辑过的答案...除了我肯定想把它称为"Max`而不是`max`,并使其静止:)通过重载它以获得更少的参数,你也可以使它更有效率. (2认同)

Her*_*eld 12

作为通用

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

public static T Max<T>(params T[] values) {
    return values.Max();
}
Run Code Online (Sandbox Code Playgroud)


use*_*080 9

关于主题,但这里是中间价值的公式..以防万一有人正在寻找它

Math.Min(Math.Min(Math.Max(x,y), Math.Max(y,z)), Math.Max(x,z));
Run Code Online (Sandbox Code Playgroud)


Ber*_*ial 6

让我们假设你有一个List<int> intList = new List<int>{1,2,3}如果你想获得最大值你可以这样做

int maxValue = intList.Max();
Run Code Online (Sandbox Code Playgroud)