[英]Find Integer array in ArrayList VB.NET
因此,我使用ArrayLists存储一些整数数组,并且遇到了以下问题:
Public Class Form1
Public ag As New ArrayList
Sub a() Handles Me.Load
ag.Add(New Integer() {1, 2})
If ag.Contains(New Integer() {1, 2}) Then
MsgBox("aaa")
End If
End Sub
End Class
尽管ArrayList确实包含“ New Integer(){1,2}”,但即使我尝试这样做,也不会显示MsgBox:
Public Class Form1
Public ag As New ArrayList
Sub a() Handles Me.Load
ag.Add(New Integer() {1, 2})
Dim t = New Integer() {1, 2}
For Each it In ag
If it.Equals(t) Then
MsgBox("aa")
Exit For
End If
Next
End Sub
End Class
它根本不会显示。
提前致谢。
- - - - - - - -编辑 - - - - - - - -
我最终决定只比较Integer列表的值,如下所示:
Public Class Form1
Public ag As New List(Of Integer())
Sub a() Handles Me.Load
ag.Add(New Integer() {1, 2})
Dim t = New Integer() {1, 2}
For Each it In ag
If it(0) = t(0) And it(1) = t(1) Then
MsgBox("aa")
Exit For
End If
Next
End Sub
End Class
谢谢大家的回复。
数组是引用类型。 默认情况下,引用类型对.Equals()
和=
比较使用引用相等。 由于您在两种情况下都与New Integer{1,2}
进行比较(强调New
),因此您正在与两个不同的引用进行比较。 即使两个数组具有相同的值,它们也是内存中的两个不同的对象,每个对象都有自己不同的引用,因此引用比较将始终返回false。
为了使此工作按您希望的方式进行,您需要进行价值比较而不是参考比较。 不幸的是, .Net没有内置机制可以在array之间进行值比较 。 您将必须从头开始实现自己的EqualityComparer 。
除非。
您不会说这些数组从何而来。 如果您能够管理这些数组,以便可以将该数组与相同的引用进行比较,则可以进行以下工作:
Public Class Form1
Public ag As New List(Of Integer())
Sub a() Handles Me.Load
Dim t As New Integer() {1,2}
ag.Add(t)
If ag.Contains(t) Then
MsgBox("aaa")
End If
End Sub
End Class
当我在这里时,您还应该将ArrayList
更改为List(Of Integer())
。
我不确定列表是否接受您正在执行的初始化(新{1,2)...),但是无论如何您都可以使用LINQ来加快搜索速度:
dim ag as new ListOf(Integer)
ag.Add(1)
ag.Add(2)
dim WHat2Find as integer = 2
Dim Located As Integer = Ag.FindIndex(Function(y) y.Contains(What2Find))
If Located > -1
' Found!
End If
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.