|
对于任意数据类型都有效的【字典定位+数组统计】代码如下:- Sub DicCount()
- Arr = Array(0, 1, 1, 1, 0, 0, 2, 2, 1, 3, 3, 0, 0, 1, 1, 1, 2, 3, 0, 2, 2)
- Arr = Array("a", "a", "b", "a", "a", "a", "b", "b", "a", "a", "a", "d")
-
- ReDim brr(UBound(Arr), 3)
-
- Set d = CreateObject("Scripting.Dictionary")
- m = 0: d(CStr(Arr(0))) = m: t = m: brr(t, 0) = Arr(0)
-
- For i = 0 To UBound(Arr) - 1
- If Arr(i) = Arr(i + 1) Then
- brr(t, 1) = brr(t, 1) + 1
- Else
- If brr(t, 1) > brr(t, 2) Then
- brr(t, 2) = brr(t, 1)
- brr(t, 3) = 1
- ElseIf brr(t, 1) = brr(t, 2) Then
- brr(t, 3) = brr(t, 3) + 1
- End If
- brr(t, 1) = 0
-
- t = d(CStr(Arr(i + 1)))
- If t = "" Then m = m + 1: d(CStr(Arr(i + 1))) = m: t = m: brr(t, 0) = Arr(i + 1)
- End If
- Next
- If Arr(i) = Arr(i - 1) Then
- If brr(t, 1) > brr(t, 2) Then
- brr(t, 2) = brr(t, 1)
- brr(t, 3) = 1
- ElseIf brr(t, 1) = brr(t, 2) Then
- brr(t, 3) = brr(t, 3) + 1
- End If
- Else
- If brr(t, 3) = 0 Then brr(t, 3) = 1
- End If
-
- For i = 0 To m
- StrT = StrT & vbCr & brr(i, 0) & " Continue Max Count " & brr(i, 2) + 1 & ", Frequency " & brr(i, 3) & " times"
- Next i
- MsgBox "Continue Max Count Detail: " & StrT
- End Sub
复制代码 这样的算法,效率是最高的。
尤其是数据量较大时,字典方法本身肯定比数组要慢。
|
|