c#listbox中的最大和最小查找

时间:2015-03-09 21:32:10

标签: c#

private void tbimput_KeyPress(object sender, KeyPressEventArgs e)
{
    if(e.KeyChar==(char)13)
    {
        if(tbimput.Text!="")
        {
            lbprices.Items.Add(tbunos.Text);
            tbprices.Text="";
        }
    }
}

private void btracunaj_Click(object sender, EventArgs e)
{
    int i,n,l,j;
    double x,y,max,min;
    n = lbprices.Items.Count;
    l = lbprices.Items.Count;
    x = Convert.ToDouble(lbprices.Items[0]);
    y = Convert.ToDouble(lbprices.Items[0]);
    max = n;

    for(i = 1; i < n; i++)
    {
        x=Convert.ToDouble(lbprices.Items[i]);

        if (x > max)
        {
            max = x;
        }                
    }

    min = l;

    for(j=1;j<l;j++)
    {
        y = Convert.ToDouble(lbprices.Items[j]);

        if (y < min)
        {
            min = y;
        }
    }

        tbmax.Text = Convert.ToString(max);
        tbmin.Text = Convert.ToString(min);
    }
}

如何使用循环计数在ListBox中查找最大值和最小值。我试过但它没有给我最小值,只给出了最大值。最小值只给了我ListBox中的一些价格。我已经尝试了很长时间但却未能成功。

4 个答案:

答案 0 :(得分:1)

一次通过将是最有效的

double max = Convert.ToDouble(lbprices.Items[0]);
double min = max;

for(i = 1; i < lbprices.Items.count; i++)
{
    x = Convert.ToDouble(lbprices.Items[i]);
    if      (x > max)
        max = x;    
    else if (x < min)
        min = x;          
}

答案 1 :(得分:0)

此代码:

 for(j=1;j<l;j++)
     y = Convert.ToDouble(lbprices.Items[j]);
 if (y < min)
     min = y;

应该是:

min = max;
for(j=1;j<l;j++)
{
     y = Convert.ToDouble(lbprices.Items[j]);
     if (y < min)
        min = y;
}

PS。 您应该注意缩进以使代码可读。它可以帮助您避免这样的错误。

答案 2 :(得分:0)

假设您有一个字符串列表 - 或任何IEnumerable<string>类型:

var x = new List<string> { "1", "2", "3","7389" };

最低限度:var min = x.Min(y => Int32.Parse(y));

最高限额:var max = x.Max(y => Int32.Parse(y)))

如果您没有IEnumerable<string>但类型可以转换为字符串,则可以先var z = x.Cast<string>();然后在新列表上执行操作。

答案 3 :(得分:-1)

如果您想以现在的方式或多或少地使用循环,您应该这样做:

max = Int32.MinValue;

for(i = 1; i < n; i++)
{
    x=Convert.ToDouble(lbprices.Items[i]);

    if (x > max)
    {
        max = x;
    }                
}

min = Int32.MaxValue;

for(j=1;j<l;j++)
{
    y = Convert.ToDouble(lbprices.Items[j]);

    if (y < min)
    {
        min = y;
    }
}

如果你想用Linq做一些更干净的事情,你可以这样做:

var orderedItems = lbprices.Items.Select(x => Convert.ToDouble(x)).OrderBy(x => x);

var min = orderedItems.First();
var max = orderedItems.Last();

或者,甚至更清洁,@ Andrej使用.Min()和.Max():

var items = lbprices.Items.Select(x => Convert.ToDouble(x));

var min = items.Min();
var max = items.Max();