所以我使用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)
谢谢大家的回复。
答案 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