计算数组中的最大值和最小值

Tum*_*ble 3 c# arrays element

我有一个整数数组,需要在最大数字的数组中找到最小值的位置.我有它工作但它似乎不是一个非常好的方法来做到这一点.任何人都可以建议一个更好的方法来实现我的目标吗?

这是我的代码:

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)

Jon*_*eet 7

那段代码很好.我建议稍微更改变量名称,但这就是全部.您可以在同一循环中计算出最小值.我已经非常轻微地改变了"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)

如果您还没有遇到可以为空的值类型,请不要担心...