2014-10-20 3 views
0

У меня есть ListBox с 10 пунктов, как это:Удаление повторяющихся элементов из ListBox в C#

1:3 
2:2 
2:2 
2:2 
1:3 
6:8 
6:8 
9:1 
7:2 
9:1 

Я хочу, чтобы удалить дубликаты, так что результат выглядит следующим образом:

1:3 
2:2 
6:8 
9:1 
7:2 

Вот что Я пробовал:

private void button2_Click(object sender, EventArgs e) 
{ 
    for (int p = 0; p < 10; p++) 
    { 
     a[p] = System.Convert.ToInt32(Interaction.InputBox("Please Enter 10 Number:", "", "", 350, 350)); 
     listBox1.Items.Add(a[p]); 
    } 
} 

private void button3_Click(object sender, EventArgs e) 
{ 
    for (int j = 0; j < 10; j++) 
    { 
     for (int k = 0; k < 10; k++) 
     { 
      if (a[j] == a[k]) 
       b = b + 1; 
     } //end of for (k) 
     listBox2.Items.Add(a[j] + ":" + b); 
     b = 0; 
    } //end og for (j) 
} 

ответ

1
 List<string> p = new List<string>(); 

     p.Add("1:2"); 
     p.Add("1:4"); 
     p.Add("1:3"); 
     p.Add("1:2"); 

     List<string> z = p.Distinct().ToList(); 

Вот самый простой способ сделать это. Вместо прямого listBox.Items.Add(value) добавьте значения в List<string> и добавьте их как DataSource listBox. Вы должны выполнить действие Distinct() перед тем, как положить DataSource. Если это asp.net вам нужно listBox.DataBind() после этого.

Edit:

private void button3_Click(object sender, EventArgs e) 
{ 
    List<string> list = new List<string>(); 
    for (int j = 0; j < 10; j++) 
    { 
     for (int k = 0; k < 10; k++) 
     { 
      if (a[j] == a[k]) 
       b = b + 1; 
     } //end of for (k) 
     list.Add(a[j] + ":" + b); 
     b = 0; 
    } //end og for (j) 

    List<string> result = list.Distinct().ToList(); 
    listBox2.DataSource = result; 
    //listBox2.DataBind(); this is needed if it is asp.net, if it is winforms it is not needed ! 
} 
+0

Как очистить элементы ListBox? listBox2.Items.Clear(); не работает :( – Shadan64

0
private void button1_Click(object sender, EventArgs e) 
{ 
    string[] arr = new string[listBox1.Items.Count]; 
    listBox1.Items.CopyTo(arr, 0); 

    var arr2 = arr.Distinct(); 

    listBox1.Items.Clear(); 
    foreach (string s in arr2) 
    { 
     listBox1.Items.Add(s); 
    } 
}