c#如何在列表框中找到最小和最大的值

时间:2017-12-11 19:33:08

标签: c# arrays algorithm

任何人都可以协助我处理我无法解决的C#程序部分。

我使用C#windows表单应用程序。我创建了一个生成随机非重复数字的程序。数字范围介于0到100之间,并在列表框中显示范围内的30个值。

注意:列表框未使用数组声明,因为列表框本身就是一个数组,我不想声明新数组。

我在查找列表框中的最小和最大值并将结果输出到标签时遇到了一些麻烦。但是使用我当前的代码,它只显示列表框底部的最后一项。

        int smallestValue = 0;
        int largestValue = 0;


        for (int i = 0; i < lstNumberList.Items.Count; i++)
        {
            if(i > largestValue)
            {
                largestValue = i;
                lblMaxResult.Text = lstNumberList.Items[largestValue].ToString();

            }
            if (i < smallestValue)
            {
                smallestValue = i;
                lblMinResult.Text = lstNumberList.Items[smallestValue].ToString();
            }
        }

2 个答案:

答案 0 :(得分:1)

为了避免此类错误(将索引 i视为 int.Parse(lstNumberList.Items[i].ToString)),您可能需要更改for循环进入foreach一:

int smallestValue = int.MaxValue;
int largestValue = int.MinValue;

foreach (var item in lstNumberList.Items) {
  int value = int.Parse(item.ToString());

  if (value > largestValue)
    largestValue = value;

  if (value < smallestValue) 
    smallestValue = value;
}

// Let's push UI out of the loop (we want min and to be printed once)
lblMaxResult.Text = $"{largestValue}";
lblMinResult.Text = $"{smallestValue}";

在现实世界中,当我们想查询时,我们经常使用 Linq

  using System.Linq;

 ...

  var data = lstNumberList
    .Items
    .OfType<String>()
    .Select(item => int.Parse(item));

  lblMaxResult.Text = $"{data.Max()}";
  lblMinResult.Text = $"{data.Min()}";

答案 1 :(得分:0)

修正了您的解决方案:

    var smallestValue = int.MaxValue;
    var largestValue = int.MinValue;

    for (int i = 0; i < lstNumberList.Items.Count; i++)
    {
        var value = (int)lstNumberList.Items[i];
        if(value > largestValue)
        {
            largestValue = value;
            lblMaxResult.Text = largestValue.ToString();

        }
        if (value < smallestValue)
        {
            smallestValue = value;
            lblMinResult.Text = smallestValue.ToString();
        }
    }