在ArrayList VB.NET中查找Integer数组

时间:2017-07-31 15:40:30

标签: arrays vb.net arraylist

所以我使用ArrayLists存储一些整数数组,我想出了以下问题:

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

虽然ArrayList确实包含“New Integer(){1,2}”,但即使我尝试这样做,也不会显示MsgBox:

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

根本不显示。

提前致谢。

--------------- EDIT ---------------

我最终决定只比较整数列表的值:

import requests
import json 

r=requests.post('https://api.vimeo.com/oauth/authorize/client?grant_type=client_credentials', varData,  headers={'Authorization': 'basic XXX'})
response = json.loads(r.text)

谢谢大家的回复。

2 个答案:

答案 0 :(得分:2)

数组是引用类型。默认情况下,引用类型对.Equals()=比较使用引用相等性。由于您在两种情况下都要与New Integer{1,2}进行比较(强调{​​{1}}),因此您需要与两个不同的引用进行比较。尽管两个数组具有相同的值,但它们是内存中的两个不同对象,每个对象都有不同的引用,因此引用比较将始终返回false。

为了使您的工作按照您想要的方式进行,您需要进行值比较而不是参考比较。不幸的是,没有内置于.Net的机制来进行数组之间的值比较。您必须从头开始实施自己的EqualityComparer

除非。

你不会说这些数组的来源。如果您能够管理这些数组,以便可以将数组与相同的引用进行比较,则可以使其工作:

New

虽然我在这里,但您也应该将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

答案 1 :(得分:0)

我不确定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