在C#中有一种方法来find最多的3个数字?
像Math.Max,但需要3或int的参数?
谢谢
那么,你可以调用它两次:
int max3 = Math.Max(x, Math.Max(y, z));
如果你发现自己做了很多事情,你总是可以写自己的帮手方法……我很高兴在代码库中看到这个,但不是经常的。
(请注意,这可能比Andrew基于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); } }
这样你就可以写入MoreMath.Max(1, 2, 3)
或者MoreMath.Max(1, 2, 3, 4)
而不需要创build数组的开销,但是仍然可以写成MoreMath.Max(1, 2, 3, 4, 5, 6)
,当你不介意开销时,可读性和一致性都很好。
我个人发现,比LINQ方法的显式数组创build更可读。
你可以使用Enumerable.Max
:
new [] { 1, 2, 3 }.Max();
Linq有一个Max函数。
如果你有一个IEnumerable<int>
你可以直接调用它,但是如果你需要在不同的参数中,你可以创build一个如下的函数:
using System.Linq; ... static int Max(params int[] numbers) { return numbers.Max(); }
那么你可以这样调用它: max(1, 6, 2)
,它允许任意数量的参数。
作为通用的
public static T Min<T>(params T[] values) { return values.Min(); } public static T Max<T>(params T[] values) { return values.Max(); }
closures主题,但这里是中间价值的公式,以防万一有人在寻找它
Math.Min(Math.Min(Math.Max(x,y), Math.Max(y,z)), Math.Max(x,z));
假设你有一个List<int> intList = new List<int>{1,2,3}
如果你想得到一个最大值你可以做
int maxValue = intList.Max();
如果无论出于何种原因(例如Space Engineers API),System.array没有Max的定义,也没有访问Enumerable的解决scheme,则n值为Max(或Min)的解决scheme是:
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; }