我有两个列表框(1:主要,2:次要)。 这些列表框包含数字。主列表框包含7个数字,辅助列表框包含6个数字。
我想比较Primary Listbox和Secondary的值。 这种比较应产生三个结果:
结果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
请注意:
我已更改了整个界面,因此该帖子已过时,现在已经无用。谢谢大家的支持!
我将其留给主持人来决定是删除此帖子还是保留该帖子以供其他用户参考。
我将标记此帖子。
答案 0 :(得分:2)
找到匹配项
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
我假设您的项目是整数,但是如果将它们添加为字符串,则需要将 Cast(Of Int32)更改为 Cast(Of String)
答案 1 :(得分:1)
首先,我使用一些linq将ListBoxes的内容放入数组。然后使用.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