我有一个整数数组,需要在最大数字的数组中找到最小值的位置.我有它工作但它似乎不是一个非常好的方法来做到这一点.任何人都可以建议一个更好的方法来实现我的目标吗?
这是我的代码:
int[] usageHours = { 3, 3, 5, 4, 0, 0, 2, 2, 4, 25, 158, 320, 212, 356, 401, 460, 480, 403, 298, 213, 102, 87, 34, 45 };
double myAverage = usageHours.Average();
int runningTotal = 0;
int runningMaxPosition = 0;
for (int i = 0; i < usageHours.Length; i++)
{
if (usageHours[i] > runningTotal)
{
runningMaxPosition = i;
runningTotal = usageHours[i];
}
}
txtmax.Text = Convert.ToString(runningMaxPosition)+" With: "+Convert.ToString(runningTotal)+" Users";
txtAv.Text = Convert.ToString(myAverage);
Run Code Online (Sandbox Code Playgroud)
那段代码很好.我建议稍微更改变量名称,但这就是全部.您可以在同一循环中计算出最小值.我已经非常轻微地改变了"if"条件,以保证它们总是挑出至少一个元素(即使所有值都是,例如int.MinValue).还有其他方法可以解决这个问题,但这只是一个例子.如果你有一个空数组,你最终会得到max = min = 0,并且两个索引都是-1.
int currentMax = 0;
int currentMaxIndex = -1;
int currentMin = 0;
int currentMinIndex = -1;
for (int i = 0; i < usageHours.Length; i++)
{
if (currentMaxIndex == -1 || usageHours[i] > currentMax)
{
currentMaxIndex = i;
currentMax = usageHours[i];
}
if (currentMinIndex == -1 || usageHours[i] < currentMin)
{
currentMinIndex = i;
currentMin = usageHours[i];
}
}
Run Code Online (Sandbox Code Playgroud)
这是使用可空值类型来表示"没有值"答案的替代方法:
int currentMax? = null;
int currentMaxIndex? = null;
int currentMin? = null;
int currentMinIndex? = null;
for (int i = 0; i < usageHours.Length; i++)
{
if (currentMax == null || usageHours[i] > currentMax.Value)
{
currentMax = i;
currentMax = usageHours[i];
}
if (currentMin == null || usageHours[i] < currentMin.Value)
{
currentMinIndex = i;
currentMin = usageHours[i];
}
}
Run Code Online (Sandbox Code Playgroud)
如果您还没有遇到可以为空的值类型,请不要担心...