【问题标题】:Find Integer array in ArrayList VB.NET在 ArrayList VB.NET 中查找整数数组
【发布时间】:2017-07-31 15:40:30
【问题描述】:

所以我使用 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

它根本不会显示。

提前致谢。

---------------编辑---------------

我最终决定像这样比较整数列表的值:

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

谢谢大家的回复。

【问题讨论】:

  • 在哪里比较 'ag' 和 'New Integer() {1, 2}'?
  • 不要使用 ArrayList
  • 我比较了 'ag' 的内容和 'New Integer() {1, 2}'
  • 我还能用什么?
  • 你没有比较/测试任何东西的内容New Integer() {1, 2} 创建一个 new 数组

标签: arrays vb.net arraylist


【解决方案1】:

数组是引用类型。引用类型默认使用引用相等来进行.Equals()= 比较。由于您在两种情况下都与New Integer{1,2} 进行比较(强调New),因此您是在与两个不同的参考进行比较。即使两个数组的值相同,但它们是内存中的两个不同对象,每个对象都有自己不同的引用,因此引用比较总是会返回 false。

为了按照您想要的方式进行这项工作,您需要进行值比较而不是参考比较。不幸的是,.Net 中没有内置机制来进行数组之间的值比较。您必须从头开始实现自己的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())

【讨论】:

  • 谢谢,我只做数值比较,希望不要太拖慢程序。
  • 非常感谢,但我不能在我的程序中这样做。
【解决方案2】:

我不确定 List 是否接受您正在进行的初始化(新的 {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

【讨论】:

  • 谢谢,但我不是要在列表中查找整数,而是要在列表中查找整数列表。
猜你喜欢
  • 1970-01-01
  • 2015-05-13
  • 2010-09-26
  • 1970-01-01
  • 2012-09-23
  • 2015-12-08
  • 1970-01-01
  • 2013-11-03
相关资源
最近更新 更多