Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 946|回复: 5

[已解决]2个数组怎么比较

[复制链接]
发表于 2022-6-3 12:49 | 显示全部楼层 |阅读模式
就是有2个数组,数组里面放的就是双精度的数值 比如
Sub add()
Dim ar(1), br(1), i As Integer
    ar(0) = 123: ar(1) = 456
    br(0) = 123: br(1) = 456

    For i = LBound(ar) To UBound(ar)
        If ar(i) = br(i) Then r = r + 1
    Next i
    If r = 2 Then
        MsgBox "数组相同"
    Else
        MsgBox "数组不同"
    End If
End Sub

问题 1 有什么方法可以直接比较2个数组不 比如 ar=br
问题 2  上面的例子就是数组元素放的内容是一直,顺序也一样,要是顺序不一样的话 那数组就是不一样吗,有什么方法容错下

最佳答案
2022-6-4 11:45
数组只能 逐个值比较 ,
Sub add()
Dim ar(1), br(1), i As Integer
    ar(0) = 123: ar(1) = 456
    br(0) = 123: br(1) = 456

    For i = LBound(ar) To UBound(ar)
        If ar(i) <> br(i) Then
            MsgBox "数组不同"
            Exit Sub
        End If
    Next i

    MsgBox "数组相同"
   
End Sub
========================================
但一维数组 可以 用join 转为文本
Sub add2()
Dim ar(1), br(1), i As Integer, ar文本 As String, br文本 As String
    ar(0) = 123: ar(1) = 456
    br(0) = 123: br(1) = 456

    ar文本 = Join(ar, "◆")
    br文本 = Join(br, "◆")
   
    If ar文本 = br文本 Then
        MsgBox "数组相同"
    Else
        MsgBox "数组不同"
    End If

End Sub
发表于 2022-6-4 11:45 | 显示全部楼层    本楼为最佳答案   
数组只能 逐个值比较 ,
Sub add()
Dim ar(1), br(1), i As Integer
    ar(0) = 123: ar(1) = 456
    br(0) = 123: br(1) = 456

    For i = LBound(ar) To UBound(ar)
        If ar(i) <> br(i) Then
            MsgBox "数组不同"
            Exit Sub
        End If
    Next i

    MsgBox "数组相同"
   
End Sub
========================================
但一维数组 可以 用join 转为文本
Sub add2()
Dim ar(1), br(1), i As Integer, ar文本 As String, br文本 As String
    ar(0) = 123: ar(1) = 456
    br(0) = 123: br(1) = 456

    ar文本 = Join(ar, "◆")
    br文本 = Join(br, "◆")
   
    If ar文本 = br文本 Then
        MsgBox "数组相同"
    Else
        MsgBox "数组不同"
    End If

End Sub
回复

使用道具 举报

 楼主| 发表于 2022-6-4 13:00 | 显示全部楼层
砂海 发表于 2022-6-4 11:45
数组只能 逐个值比较 ,
Sub add()
Dim ar(1), br(1), i As Integer

好吧,也只能这样,逐个值比较 就是数组里面的值的顺序不一样 也会造成不一致
回复

使用道具 举报

发表于 2022-6-5 01:02 | 显示全部楼层
如果都是数组内没重复还可以这样写,位运算符xor
Sub main()
Dim a, b, i
i = 0
a = Array(123, 456)
b = Array(456, 123)
result = opera(a, b, 0)
If result = 0 Then MsgBox "数组相同" Else MsgBox "数组不同"
End Sub

Function opera(arr, brr, i) As Long

If UBound(arr) = UBound(brr) Then
If i <= UBound(arr) Then opera = opera(arr, brr, i + 1) Xor arr(i) Xor brr(i)
Else
opera = 1
End If
End Function
回复

使用道具 举报

发表于 2022-6-7 09:48 | 显示全部楼层
  1. Sub add()
  2. Dim ar(1), br(1), i As Integer
  3.     ar(0) = 123: ar(1) = 456
  4.     br(0) = 456: br(1) = 123

  5.     For i = LBound(ar) To UBound(ar)
  6.         For j = LBound(br) To UBound(br)
  7.             If ar(i) = br(j) Then r = r + 1
  8.         Next j
  9.     Next i
  10.     If r = 2 Then
  11.         MsgBox "数组相同"
  12.     Else
  13.         MsgBox "数组不同"
  14.     End If
  15. End Sub
复制代码
回复

使用道具 举报

发表于 2022-6-8 16:35 | 显示全部楼层
本帖最后由 砂海 于 2022-6-8 16:37 编辑

Sub add()
    '字典不是EXCEL的自带功能 , 未完整安装就没有
    Dim D
    Set D = CreateObject("scripting.dictionary")    '建立字典
   
    Dim ar(2), br(2), i As Integer
    Dim cr(2), j As Integer
   
    ar(0) = 123: ar(1) = 456: ar(2) = 123
    br(0) = 123: br(1) = 123: br(2) = 456

    For i = LBound(ar) To UBound(ar)
        D(ar(i)) = D(ar(i)) + 1
    Next i

    For i = LBound(br) To UBound(br)
        D(br(i)) = D(br(i)) - 1
    Next i

    For i = LBound(ar) To UBound(ar)    '其实可以只循环不重复值得个数 , 字典有去重功能 , 本程序未使用 , 不是几句话能说清楚的
        If D(ar(i)) <> 0 Then
            MsgBox "数组不同"
            Exit Sub
        End If
    Next i
   
    MsgBox "数组相同"
   
End Sub
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-8 10:55 , Processed in 0.286012 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表