7,763
社区成员
发帖
与我相关
我的任务
分享
Option Explicit
Private Const STRING_LEN As Long = 25 '字符串长度
Private Const ARR_LENGTH = 50000 '大数组下标
Private Const A_LENGTH = 10000 '小数组下标
Private arr(ARR_LENGTH) As String
Private a(A_LENGTH) As String
'搜索数据
Private Sub Command1_Click()
Dim dic As Dictionary
Dim i As Long
Dim dt
dt = Timer
'把arr中的数据做为dic的key添加到字典中,同时过虑了重复值
Set dic = New Dictionary
For i = 0 To ARR_LENGTH
If Not dic.Exists(arr(i)) Then
dic.Add arr(i), i
End If
Next
'匹配数据
For i = 0 To A_LENGTH
If dic.Exists(a(i)) Then Debug.Print a(i)
Next
MsgBox "用时: " & Timer - dt
Set dic = Nothing
End Sub
'窗体载入时添加测试数据
Private Sub Form_Load()
Dim i As Long
Dim tmp As String
For i = 0 To ARR_LENGTH
arr(i) = GetRndString(STRING_LEN)
If i <= A_LENGTH Then a(i) = GetRndString(STRING_LEN)
Next
End Sub
'组成N位字符串
Function GetRndString(n As Long) As String
Dim i As Long
Dim s As String
Randomize
s = Space(n)
For i = 1 To n
Mid(s, i, 1) = Int(Rnd * 10) '由0-9的数字组成n位字符串
Next
GetRndString = s
End Function
Option Explicit
Private Const STRING_LEN As Long = 25 '字符串长度
Private Const ARR_LENGTH = 50000 '大数组下标
Private Const A_LENGTH = 10000 '小数组下标
Private arr(ARR_LENGTH) As String
Private a(A_LENGTH) As String
Private Sub Command1_Click()
Dim dic As Dictionary
Dim i As Long
Dim dt
dt = Timer
'把arr中的数据做为dic的key添加到字典中,同时过虑了重复值
Set dic = New Dictionary
For i = 1 To ARR_LENGTH
If Not dic.Exists(arr(i)) Then
dic.Add arr(i), i
End If
Next
'匹配数据
For i = 1 To A_LENGTH
If dic.Exists(a(i)) Then Debug.Print a(i)
Next
MsgBox dic.Count & " =============== " & Timer - dt
Set dic = Nothing
End Sub
Private Sub Form_Load()
Dim i As Long
Dim tmp As String
'添加测试数据
For i = 1 To ARR_LENGTH
arr(i) = GetRndString(STRING_LEN)
If i <= A_LENGTH Then a(i) = GetRndString(STRING_LEN)
Next
End Sub
'生成字符串
Function GetRndString(n As Long) As String
Dim i As Long
Dim s As String
Randomize
s = Space(n)
For i = 1 To n
Mid(s, i, 1) = Int(Rnd * 10) '由0-9的数字组成n位字符串
Next
GetRndString = s
End Function
Dim arr(50000) As String, a(10000) As String
Dim i As Long
Dim tmp As String, t As String
Dim dt
'填充测试数组
Randomize
For i = 0 To 50000
tmp = Space(25)
tmp = Replace(tmp, " ", Chr(Int(Rnd * 74 + 33)))
arr(i) = tmp
Next
For i = 0 To 10000
tmp = Space(25)
tmp = Replace(tmp, " ", Chr(Int(Rnd * 74 + 33)))
a(i) = tmp
Next
'匹配数据
dt = Timer '开始计时
tmp = vbNullString
tmp = Join(arr, ",")
For i = 0 To 10000
If InStr(tmp, a(i)) Then 'Debug.Print a(i)
t = a(i)
End If
Next
MsgBox Timer - dt