[vb.net]一个数组对象与另一个数组对象的相等判断问题

txlk33 2014-10-18 12:56:48
下面的例子可以看出,两个相同的数组对象对比判断结果都返回False
有没有直接数组对象的相等判断语句呢?


Public Class Form1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim Array1 As String() = {"1", "2", "3"}
Dim Array2 As String() = {"1", "2", "3"}
Dim List1 As New List(Of String())
List1.Add(New String() {"2", "3", "4"})
List1.Add(New String() {"1", "2", "3"})
List1.Add(New String() {"4", "5", "6"})

Dim Boolean1 As Boolean = List1.Contains(Array1)
Dim Boolean2 As Boolean = Array1.Equals(Array2)
Dim Boolean3 As Boolean = Array1 Is Array2

End Sub
End Class
...全文
414 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
im战术 2017-03-26
  • 打赏
  • 举报
回复
我查看了MSDN,并自己摸索改了一整天~有结果了 以下是我改好的代码,大家可以修改细节来达到你们所要的类型结构. 我虽然CSDN等级不高,但我有共享精神.不是机密的东西,我希望共享给大家,让国内小虾们的水平上升一些些.

    Public Class ProductA
        Public Name As String
        Public Code As Integer

        Overloads Function SequenceEqual(obj As ProductA) As Boolean
            '检查对象是否是相同的对象。 
            If Object.ReferenceEquals(Me, obj) Then Return True

            '检查类的属性是否相等。 
            Return Me IsNot Nothing And obj IsNot Nothing And Me.Code.Equals(obj.Code) And Me.Name.Equals(obj.Name)
        End Function

        Overloads Function GetHashCode() As Integer
            '获取名称字段的哈希码,如果它不为空。
            Dim hashProductName As Integer = IIf(Me.Name Is Nothing, 0, Me.Name.GetHashCode())

            '获取代码字段的哈希码。
            Dim hashProductCode As Integer = Me.Code.GetHashCode()

            '异或计算类的哈希码。
            Return hashProductName Xor hashProductCode
        End Function
    End Class

    Sub SequenceEqualEx1()
        Dim storeA() As ProductA =
    {New ProductA With {.Name = "apple", .Code = 9},
     New ProductA With {.Name = "orange", .Code = 4}}

        Dim storeB() As ProductA =
            {New ProductA With {.Name = "apple", .Code = 9},
             New ProductA With {.Name = "orange", .Code = 0}}

        Dim equalAB As Boolean = storeA(0).SequenceEqual(storeB(0))

        Dim equalBC As Boolean = storeA(1).SequenceEqual(storeB(1))

        Dim A0 As Integer = storeA(0).GetHashCode()

        Dim B0 As Integer = storeB(0).GetHashCode()

        Dim A1 As Integer = storeA(1).GetHashCode()

        Dim B1 As Integer = storeB(1).GetHashCode()

        MsgBox("A0等于B0吗? " & equalAB & vbCrLf &
               "A1等于B1吗? " & equalBC & vbCrLf &
               "HashA0: " & A0 & vbCrLf &
               "HashB0: " & B0 & vbCrLf &
               "HashA1: " & A1 & vbCrLf &
               "HashB1: " & B1)
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        SequenceEqualEx1()
    End Sub
txlk33 2014-10-19
  • 打赏
  • 举报
回复
我觉得你们两个精神有点有问题。 是不是找错医生被假医生把你们两个弄得糊涂?
threenewbee 2014-10-19
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
你的那3个判断分别是在判断啥呢?如果你说不出来这些,我建议你先学这些,先别考虑“判断数组相等”那种高大上的要求。
lz无意于学习哪怕最简单最基础的那么一点东西,也许他基础太差学不会吧。他只不过想看我们怎么给他“变一个魔术”,然后赞叹下“好神奇、好强大”。心情好就给他变一个了事呗。 此lz就是那个“求一个类可以实现插入1000亿个元素的List”号称他老师教他“看代码学编程”的奇葩兄。
threenewbee 2014-10-19
  • 打赏
  • 举报
回复
Not(Array1.Except(Array2).Any() Or Array2.Except(Array1).Any()) 或者 Array1.OrderBy(Function(x) x).Zip(Array2.OrderBy(Function(x) x), Function(x, y) x <> y).Any()
threenewbee 2014-10-19
  • 打赏
  • 举报
回复
引用 4 楼 txlk33 的回复:
是不是找错医生被假医生把你们两个弄得糊涂?
你是朝鲜族人?汉语不是你的母语么?
  • 打赏
  • 举报
回复
你的那3个判断分别是在判断啥呢?如果你说不出来这些,我建议你先学这些,先别考虑“判断数组相等”那种高大上的要求。

16,553

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧