Search code examples
c#indexingduplicateslistboxminimum

How to find indexes of the most small duplicated value in a ListBox?


I tried everything i could find online and spent a lot of time on this but I cant do it.

It's a form with a ListBox with random numbers from 20 to 30 and I need to find the min and show its position. The hard part is that if i have 2 of the same number or 3 of them, then I don't know what to do and I tried almost everything.

This is the code i did so far:

Random r = new Random();

int[] a;
private void button2_Click(object sender, EventArgs e)
{
    int i;
    a = new int[10];
   
    listBox1.Items.Clear();
    for (i = 0; i < 10; i++)
    {
        a[i] = r.Next(20, 31);
        listBox1.Items.Add(a[i]);
    }
}

private void button1_Click(object sender, EventArgs e)
{ 
    int[] b;
    b = new int[10];
    int mini=3435, i,index=0;
    b = (int[])a.Clone();
   
    for (i = 1; i < 10; i++)
    {
        if (b[i] < mini)
        {
            mini = b[i];
        }
    }
    
    index = Array.IndexOf(b, mini);
    label2.Text = Convert.ToString("la pozitia: " + index);
    

    label1.Text = Convert.ToString("Minimul este: " +mini );
   
}

This is how it should look:
This is how it should look


Solution

  • Since you simply want to output the positions as a comma seperate list, you can use a separate string for the list of positions that match:

    int[] b;
    b = new int[10];
    int mini = int.MaxValue, i, index = 0;
    string miniList = "";
    b = (int[])a.Clone();
    
    for (i = 0; i < 10; i++)
    {
        if (b[i] < mini)
        {
            mini = b[i];
            miniList = "";
        }
        if (b[i] == mini)
        {
            if (!string.IsNullOrEmpty(miniList))
            {
                miniList += ", ";
            }
            miniList += i;
        }
    }
    
    label1.Text = Convert.ToString("Minimul este: " + mini);
    label2.Text = Convert.ToString("la pozitia: " + miniList);
    

    NOTE: I also set the mini value to int.MaxValue to begin with so code should work with any number range