求一段能够双向比较两个数组程序,哪位能帮忙?

a1ways1010 2012-10-03 04:16:54
数组a:1、2、a、b、c、d、f
数组b:a、b、c、d、e

把数组a和b比较,最后输出的结果是:
正向比较(b里没有,a里有的),不能匹配的数据是:1、2、f
反相比较(b里有,a里没有的),不能匹配的数据是:e

请教高手,麻烦写出详细的程序,多谢~~
...全文
162 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhyj_88 2012-10-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
这个字典实在是看不懂
能不能简单讲解下?
能不能给个可以直接运行的
比如我建一个标准窗体,上面有一个按钮command1
我希望一按按钮就能出现我要的结果:
正向比较,不能匹配的数据是:
1
2
f
反相比较,不能匹配的数据是:
e

兄弟能否帮忙再弄一下?谢谢啦~~
另外,如果我这是一个二维数组呢?
数组A里的数据其实是二维数组同列不同行的数据呢?
比如a(1,1)……
[/Quote]
您先找个资料学一下字典的用法吧。一句话难以讲清楚。
但我给您的建议是充分利用VB和其他类型库中的各种对象,会对您的编程提供很大便利。如字典对象、正则对象、JS对象(尤其推荐这个对象的排序,速度巨快)、FSO、DataObject等等。
实际上我在2楼提供的程序主要是提供了一个思路,即用字典加数组来进行查找和筛选,这个速度也是很快的。但其容错机制还需要完善。如两个数组中有一个是空的或都是空的,结果数组应是空或一个数组全部,2楼程序中没有这部分内容。相信楼主可以根据需要能自行完善。
a1ways1010 2012-10-05
  • 打赏
  • 举报
回复
好吧,我再好好学习学习~~
谢谢兄弟!

[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:
这个字典实在是看不懂
能不能简单讲解下?
能不能给个可以直接运行的
比如我建一个标准窗体,上面有一个按钮command1
我希望一按按钮就能出现我要的结果:
正向比较,不能匹配的数据是:
1
2
f
反相比较,不能匹配的数据是:
e

兄弟能否帮忙再弄一下?谢谢啦~~
另外,如果我这是一个二维数组呢?
数组A里的数据其实是二维数组同列不同行的数……
[/Quote]
a1ways1010 2012-10-04
  • 打赏
  • 举报
回复
兄弟果然用心 ,先谢谢了!
我试验一下,看是不是管用
只是我实在太菜,连字典是啥意思,怎么用都不知道,嘿嘿
如果方便的话,能不能帮忙简单讲解下?
不胜感激!
[Quote=引用 2 楼 的回复:]
看这个吧,更清楚些。

VB code


Option Explicit
Public Sub main()
Dim A(), B(), AtoB(), BtoA()
A = Array("a1", "a2", "a", "b", "c", "d", "f")
B = Array("a", "b", "c", "d", "e")
Compare……
[/Quote]
贝隆 2012-10-04
  • 打赏
  • 举报
回复
楼上的看来是费了心思的!
a1ways1010 2012-10-04
  • 打赏
  • 举报
回复
这个字典实在是看不懂
能不能简单讲解下?
能不能给个可以直接运行的
比如我建一个标准窗体,上面有一个按钮command1
我希望一按按钮就能出现我要的结果:
正向比较,不能匹配的数据是:
1
2
f
反相比较,不能匹配的数据是:
e

兄弟能否帮忙再弄一下?谢谢啦~~
另外,如果我这是一个二维数组呢?
数组A里的数据其实是二维数组同列不同行的数据呢?
比如a(1,1)=1;a(2,1)=2;a(3,1)=a;a(4,1)=b;a(5,1)=c……
b(1,3)=a;b(2,3)=b;b(3,3)=c……
这程序能否通用?

[Quote=引用 2 楼 的回复:]
看这个吧,更清楚些。

VB code

Option Explicit
Public Sub main()
Dim A(), B(), AtoB(), BtoA()
A = Array("a1", "a2", "a", "b", "c", "d", "f")
B = Array("a", "b", "c", "d", "e")
CompareAr……
[/Quote]
zhyj_88 2012-10-04
  • 打赏
  • 举报
回复
看这个吧,更清楚些。

Option Explicit
Public Sub main()
Dim A(), B(), AtoB(), BtoA()
A = Array("a1", "a2", "a", "b", "c", "d", "f")
B = Array("a", "b", "c", "d", "e")
CompareArrs A(), B(), AtoB()
CompareArrs A(), B(), BtoA(), False
End Sub
Public Function CompareArrs(Arra(), Arrb(), ArrResult(), Optional Direction As Boolean = True) As Boolean
Dim Dic1, Dic2, i, j
Set Dic1 = CreateObject("scripting.dictionary") 'A数组的字典形式
Set Dic2 = CreateObject("scripting.dictionary") 'A数组和B数组的交集的字典形式
For i = LBound(Arra) To UBound(Arra)
Dic1(Arra(i)) = ""
Next i
For i = LBound(Arrb) To UBound(Arrb)
If Dic1.Exists(Arrb(i)) Then
Dic2(Arrb(i)) = ""
End If
Next i
j = 0
Erase ArrResult
If Direction Then '正向比较,即数组A中有且数组B中没有的元素
For i = LBound(Arra) To UBound(Arra)
If Not Dic2.Exists(Arra(i)) Then
ReDim Preserve ArrResult(j)
ArrResult(j) = Arra(i)
j = j + 1
End If
Next i
Else '负向比较,即数组B中有且数组A中没有的元素
For i = LBound(Arrb) To UBound(Arrb)
If Not Dic2.Exists(Arrb(i)) Then
ReDim Preserve ArrResult(j)
ArrResult(j) = Arrb(i)
j = j + 1
End If
Next i
End If
If j = 0 Then
CompareArrs = False '表示ArrResult数组中没有匹配的元素
Else
CompareArrs = True '表示ArrResult数组中有匹配的元素
End If
Set Dic1 = Nothing
Set Dic2 = Nothing
End Function
zhyj_88 2012-10-04
  • 打赏
  • 举报
回复
Option Explicit
Public Sub main()
Dim A(), B(), AtoB(), BtoA()
A = Array("a1", "a2", "a", "b", "c", "d", "f")
B = Array("a", "b", "c", "d", "e")
CompareArrs A(), B(), AtoB()
CompareArrs A(), B(), BtoA(), False
End Sub
Public Function CompareArrs(Arra(), Arrb(), ArrResult(), Optional Direction As Boolean = True) As Boolean
Dim Dic1, Dic2, Dic3, i, j, Arr() As Variant
Set Dic1 = CreateObject("scripting.dictionary") 'A数组的字典形式
Set Dic2 = CreateObject("scripting.dictionary") 'A数组和B数组的交集的字典形式
For i = LBound(Arra) To UBound(Arra)
Dic1(Arra(i)) = ""
Next i
For i = LBound(Arrb) To UBound(Arrb)
If Dic1.Exists(Arrb(i)) Then
Dic2(Arrb(i)) = ""
End If
Next i
j = 0
Erase ArrResult
If Direction Then '正向比较,即数组A中有且数组B中没有的元素
For i = LBound(Arra) To UBound(Arra)
If Not Dic2.Exists(Arra(i)) Then
ReDim Preserve ArrResult(j)
ArrResult(j) = Arra(i)
j = j + 1
End If
Next i
Else '负向比较,即数组B中有且数组A中没有的元素
For i = LBound(Arrb) To UBound(Arrb)
If Not Dic2.Exists(Arrb(i)) Then
ReDim Preserve ArrResult(j)
ArrResult(j) = Arrb(i)
j = j + 1
End If
Next i
End If
If j = 0 Then
CompareArrs = False '表示ArrResult数组中没有匹配的元素
Else
CompareArrs = True '表示ArrResult数组中有匹配的元素
End If
Set Dic1 = Nothing
Set Dic2 = Nothing
Set Dic3 = Nothing
End Function

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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