将listbox1项与listbox2项进行比较并删除重复项

时间:2014-12-12 08:30:11

标签: vb.net

我正在尝试将listbox1项目与listbox2项目进行比较,然后删除重复项目。

listbox1包含“link1 link2 link3 link4 link5” 'listbox1是下载项目列表

listbox2包含“link9 link5 link3” 'listbox2是下载项目列表

由于list3中已经存在“link3”和“link5”,我想将它们从listbox1中删除。

请帮帮我。

以下代码不起作用。

If listbox1.Items.Contains(listbox2.Items) Then
        listbox1.Items.Remove(listbox2.Items)
end if

4 个答案:

答案 0 :(得分:2)

我从您的示例代码中了解到您希望从Listbox2中已经存在的Listbox1中删除项目。然后使用下面的代码。

 For Each itm In ListBox2.Items
      If ListBox1.Items.Contains(itm) Then ListBox1.Items.Remove(itm)
 Next

这里我们遍历Listbox2的所有项目,并在它们存在的情况下将它们从Listbox1中删除。

答案 1 :(得分:1)

你可以用一个循环来做到这一点。对不起,我只说C#,而不是VB.NET,但概念很清楚:

foreach (var item2 in listbox2.Items)
{
    if (listbox1.Items.Contains(item2))
        listbox1.Items.Remove(item2);
}

另外,你可以尝试使用LINQ:

foreach (var item in listbox2.Items)
{
    var inOtherList = (from it1 in listbox1.Items where it1.Equals(item) select it1);
    foreach (var item in inOtherOtherList)
        listbox1.Items.Remove(item);
}

答案 2 :(得分:0)

解决同一问题的另一种方法:识别公共集,然后将其从第一个列表框的Items集合中删除

Dim common = listbox1.Items.Cast(Of string)().
                      Intersect(listbox2.Items.Cast( Of string)()).
                      ToList()

for each x in common
    listbox1.Items.Remove(x)
Next

答案 3 :(得分:0)

您也可以这样使用:将两个列表框中的不同项目列入列表框

  ListBox1.Items.AddRange(ListBox2.Items)
  Dim DistinctObj = (From LBI As Object In ListBox1.Items Distinct Select LBI).Cast(Of String)().ToArray
  ListBox1.Items.Clear()
  ListBox2.Items.Clear()
  ListBox1.Items.AddRange(DistinctObj)