Vb.net 如何比较两个列表框?

Vb.net 如何比较两个列表框?,vb.net,listbox,comparison,Vb.net,Listbox,Comparison,我有两个列表框(1:Primary,2:Secondary)。 这些列表框包含数字。主列表框包含7个数字,次列表框包含6个数字 我想比较主列表框和次列表框的值。 这种比较应产生三个结果: 结果#1: 发现X个值是常见的 结果#2: 所有号码都匹配 结果#3: 没有找到匹配项 这就是我到目前为止所做的: If lstPrimaryNumbers.Items.Count = 0 Or lstSecondaryNumbers.Items.Count = 0 Then M

我有两个列表框(1:Primary,2:Secondary)。 这些列表框包含数字。主列表框包含7个数字,次列表框包含6个数字

我想比较主列表框和次列表框的值。 这种比较应产生三个结果:

结果#1: 发现X个值是常见的

结果#2: 所有号码都匹配

结果#3: 没有找到匹配项

这就是我到目前为止所做的:

If lstPrimaryNumbers.Items.Count = 0 Or lstSecondaryNumbers.Items.Count = 0 Then
            MessageBox.Show("There is nothing to compare.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        End If

        For i As Integer = 0 To lstPrimaryNumbers.Items.Contains
            For j As Integer = 0 To lstSecondaryNumbers.Items.Contains

                If i = j Then
                    MessageBox.Show(i & " " & j & " matched!")
                End If
            Next
        Next
请注意:

我已经改变了我的整个界面,所以这篇文章已经过时了,我现在没有用了。谢谢大家的支持

我将把这篇文章留给版主决定是删除这篇文章还是保留它供其他用户参考。


我将标记此帖子。

可以通过

Dim r = lb1.Items.Cast(Of Int32).Where(Function (x) lb2.Items.Contains(x))
MessageBox.Show(String.Join(",", r) & " matched")
如果要进行完全匹配,请使用IEnumerable.All进行检查

Dim a = lb1.Items.Cast(Of Int32).All(Function (x) lb2.Items.Contains(x))
If a Then
   MessageBox.Show("Full Match")
End If
最后,如果您只想知道某些项是否匹配,请使用IEnumerable.Any

Dim b = lb1.Items.Cast(Of Int32).Any(Function(x) lb2.Items.Contains(x))
If Not b Then
    MessageBox.Show("No matches where found")
End If

我假设您的项是整数,但如果您将它们作为字符串添加,则需要将转换(Int32的转换)更改为转换(字符串的转换)

可以使用

Dim r = lb1.Items.Cast(Of Int32).Where(Function (x) lb2.Items.Contains(x))
MessageBox.Show(String.Join(",", r) & " matched")
如果要进行完全匹配,请使用IEnumerable.All进行检查

Dim a = lb1.Items.Cast(Of Int32).All(Function (x) lb2.Items.Contains(x))
If a Then
   MessageBox.Show("Full Match")
End If
最后,如果您只想知道某些项是否匹配,请使用IEnumerable.Any

Dim b = lb1.Items.Cast(Of Int32).Any(Function(x) lb2.Items.Contains(x))
If Not b Then
    MessageBox.Show("No matches where found")
End If

我假设您的项是整数,但如果您将它们作为字符串添加,则需要将转换(Int32的转换)更改为转换(字符串的转换)

首先,我将列表框的内容转换为带有一点linq的数组。然后使用.Intersect方法找到匹配项。并显示.Count。使用For Each迭代结果

Private Sub OPCode()
        Dim id1() As Integer = (From i In ListBox1.Items Select CInt(i)).ToArray
        Dim id2() As Integer = (From i In ListBox2.Items Select CInt(i)).ToArray
        Dim Matches As IEnumerable(Of Integer) = id1.Intersect(id2)
        MessageBox.Show(Matches.Count.ToString)
    End Sub
'TextBox1.Multiline = True is set at design time
'Expand the text box size so several lines will be visible
 For Each Match As Integer In Matches
      TextBox1.Text &= (CStr(Match) & Environment.NewLine)
 Next

首先,我使用一点linq将列表框的内容放入数组中。然后使用.Intersect方法找到匹配项。并显示.Count。使用For Each迭代结果

Private Sub OPCode()
        Dim id1() As Integer = (From i In ListBox1.Items Select CInt(i)).ToArray
        Dim id2() As Integer = (From i In ListBox2.Items Select CInt(i)).ToArray
        Dim Matches As IEnumerable(Of Integer) = id1.Intersect(id2)
        MessageBox.Show(Matches.Count.ToString)
    End Sub
'TextBox1.Multiline = True is set at design time
'Expand the text box size so several lines will be visible
 For Each Match As Integer In Matches
      TextBox1.Text &= (CStr(Match) & Environment.NewLine)
 Next


只需将所有匹配项添加到a中,然后进行检查。如果
Count=0
则找不到匹配项。此外,我怀疑这会编译:
到lstPrimaryNumbers.Items.Contains
。你是说物品。计数吗?是的@VisualIncent我假定.Contains将检索列表框的值。我将尝试(T的)列表。阅读IntelliSense在方法上方悬停时显示的描述,或者在键入时在成员列表中选择它,可以在将来为您节省很多麻烦。:)@非常感谢!我会记住的.只要把所有的匹配项都加到a中,然后检查一下就行了。如果
Count=0
则找不到匹配项。此外,我怀疑这会编译:
到lstPrimaryNumbers.Items.Contains
。你是说物品。计数吗?是的@VisualIncent我假定.Contains将检索列表框的值。我将尝试(T的)列表。阅读IntelliSense在方法上方悬停时显示的描述,或者在键入时在成员列表中选择它,可以在将来为您节省很多麻烦。:)@非常感谢!我会记住的.我三个都试过了。它返回一个错误,指出强制转换无效。我的listbox值是整数,所以我没有在cast中更改任何内容,只保留Int32。奇怪的是,我使用了(字符串的)强制转换,它工作了,但它没有给我想要的结果。我试过了,从视觉上看,只有一场比赛。它返回时说没有找到匹配项。@me.user您是否检查过某个地方是否有空白或不可打印的字符?您是否手动插入了这些值?复制/粘贴?@Jimi次列表框中的数字由单击事件生成。这些生成的数字首先放在不同的列表框中。然后通过这个单击事件,我将这些数字转移到辅助列表框。@me.user因此,问题扩展/转移到源列表框和/或复制方法。@Jimi是的。我的整个程序需要生成随机数。在源列表框中,通过生成单击事件用随机数填充。之后,我使用复选框将这些生成的数字传输到辅助列表框。我只需要比较主框和列表框之间的值,正如我在上面的帖子中所询问的那样。它返回一个错误,指出强制转换无效。我的listbox值是整数,所以我没有在cast中更改任何内容,只保留Int32。奇怪的是,我使用了(字符串的)强制转换,它工作了,但它没有给我想要的结果。我试过了,从视觉上看,只有一场比赛。它返回时说没有找到匹配项。@me.user您是否检查过某个地方是否有空白或不可打印的字符?您是否手动插入了这些值?复制/粘贴?@Jimi次列表框中的数字由单击事件生成。这些生成的数字首先放在不同的列表框中。然后通过这个单击事件,我将这些数字转移到辅助列表框。@me.user因此,问题扩展/转移到源列表框和/或复制方法。@Jimi是的。我的整个程序需要生成随机数。在源列表框中,通过生成单击事件用随机数填充。之后,我使用复选框将这些生成的数字传输到辅助列表框。我只需要比较主框和列表框之间的值,正如我在上面的帖子中所询问的那样。这很有效!现在我知道我得到了多少比赛,但我也希望比赛能被展示出来。例如,如果找到两个匹配项,我要求显示这两个数字,以逗号分隔。我已经编辑了我的答案,以便在文本框中显示匹配项。这很有效!现在我知道我得到了多少比赛,但我也希望比赛能被展示出来。例如,如果找到2个匹配项,我要求显示这两个数字,co