繁体   English   中英

在ArrayList VB.NET中查找整数数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM