重いに辞書を使用する方法
- 辞書重みを利用する方法、
- dict1(I)= ""
- 方法2、重いの数をカウントするために辞書を使用+
- dict2(I)= dict2(I)+ 1
- 繰り返し辞書新聞と方法3、しかし、繰り返しに行きませんでした
- 場合は、ないのdict3.exists(I)
Sub test_dict1()
Dim dict1 As Object
Set dict1 = CreateObject("scripting.dictionary")
Dim dict2 As Object
Set dict2 = CreateObject("scripting.dictionary")
Dim dict3 As Object
Set dict3 = CreateObject("scripting.dictionary")
arr1 = Range("b1:b10")
'去重
For Each I In arr1
dict1(I) = ""
Next
For Each J In dict1.keys()
Debug.Print J
Next
Debug.Print
'去重 + 统计次数
For Each I In arr1
dict2(I) = dict2(I) + 1
Next
For Each J In dict2.keys()
Debug.Print J
Next
Debug.Print
For Each K In dict2.items()
Debug.Print K
Next
Debug.Print
For Each I In arr1
If Not dict3.exists(I) Then
dict3.Add I, ""
Else
Debug.Print "存在重复值"
Exit Sub
End If
Next
End Sub
2配列の重複排除方法
2.1アレイ・サイクルは、アレイに繰り返すことができます
- ダブルループ
- キー1:2サイクルの目的は、サイクルは、配列を取り、追加のサイクル数の全ては、比較を行います
- 2つのキーポイント:外層割り当て
- キーポイント3:彼らはいくつかの非反復数があるかわからないので、カウント変数の割り当ては、独立していました
Sub test_arr1()
Dim arr2
arr1 = Array(1, 2, 3, 4, 5, 1, 2, 3, 1, 2, 1)
ReDim arr2(UBound(arr1)) '在外面需要1次redim到位
For i = LBound(arr1) To UBound(arr1)
For j = LBound(arr2) To UBound(arr2)
If arr1(i) = arr2(j) Then
GoTo line1
End If
Next
arr2(k) = arr1(i)
k = k + 1
line1: Next
For Each i In arr2
Debug.Print i
Next
End Sub
2.2たびに完全なサイクルを取ることができれば、アレイ方式、内側ループを決定するたびに、循環
- 各内側のループを判断、それぞれの時間は、あなたは完全なサイクルを取ることができるかどうか
- インデックスUBOUND + 1、または上の選択的な停止を取り戻すためにUBOUNDに駐車されている+ 1を区別することはできません
- UBOUND + 1を超える配列インデックスポインタは内部循環を完了し終えると証明する証拠が繰り返されていない、のための出口ではありません
Sub test_arr2()
Dim arr2
arr1 = Array(1, 2, 3, 4, 5, 1, 2, 3, 1)
ReDim arr2(LBound(arr1) To UBound(arr1)) '这样也没问题,一般有重复的列肯定更长
'ReDim arr2(LBound(arr1) To 99999) 这样也可以,就是故意搞1个极大数
K = 0
For I = LBound(arr1) To UBound(arr1)
For J = LBound(arr2) To K
If arr1(I) = arr2(J) Then
Exit For '为了配合后面得index选择性的停在ubound+1上,否则都停在ubound+1上没法区分
End If
Next
If J = K + 1 Then 'array的index指针停在ubound+1就证明内部循环完整走完没有exit for,证明无重复
arr2(K) = arr1(I)
K = K + 1
End If
Next
Debug.Print
For Each m In arr2
Debug.Print m;
Next
Debug.Print
End Sub
2.3繰り返し回数を確認するために配列を使用する方法
目標値の繰り返し回数をチェックする方法の配列を使用して2.3.1
Sub test001()
'查某个值得重复次数
arr1 = Array(1, 2, 3, 4, 5, 1, 2, 3, 6, 7, 8, 9)
target1 = 1
Debug.Print "arr1的最小index=" & LBound(arr1)
Debug.Print "arr1的最大index=" & UBound(arr1)
For I = LBound(arr1) To UBound(arr1)
If arr1(I) = target1 Then
Debug.Print target1 & "第" & m & "个" & "index=" & I
End If
Next
End Sub
2.3.2 +辞書を検索するために、各要素の繰り返し回数を配列の使用方法
すべての要素の数を確認してください
Sub test002()
'如果用循环方法查每个重复的值的重复次数
arr1 = Array(1, 2, 3, 4, 5, 1, 2, 3, 6, 7, 8, 9)
Dim dict1 As Object
Set dict1 = CreateObject("scripting.dictionary")
Debug.Print "arr1的最小index=" & LBound(arr1)
Debug.Print "arr1的最大index=" & UBound(arr1)
arr2 = arr1
For I = LBound(arr1) To UBound(arr1)
m = 1
For J = LBound(arr2) To UBound(arr2)
If arr1(I) = arr2(J) Then
dict1(arr1(I)) = m
m = m + 1
End If
Next
Next
For Each I In dict1.keys()
Debug.Print I & "," & dict1(I)
Next
End Sub
繰り返しの部分だけは、要素をチェック
Sub test002()
'如果用循环方法查每个重复的值的重复次数
arr1 = Array(1, 2, 3, 4, 5, 1, 2, 3, 6, 7, 8, 9)
Dim dict1 As Object
Set dict1 = CreateObject("scripting.dictionary")
Debug.Print "arr1的最小index=" & LBound(arr1)
Debug.Print "arr1的最大index=" & UBound(arr1)
arr2 = arr1
For I = LBound(arr1) To UBound(arr1)
m = 1
For J = LBound(arr2) To UBound(arr2)
If arr1(I) = arr2(J) Then
If m >= 2 Then
dict1(arr1(I)) = m
End If
m = m + 1
End If
Next
Next
For Each I In dict1.keys()
Debug.Print I & "," & dict1(I)
Next
End Sub
2.3.3その純粋な方法の配列を検索しますか?
- よくない十分
- まだ重いを行かなければならないので、それ以外の場合は非常に愚かなような結果が表示されます
Sub test002()
'如果用循环方法查每个重复的值的重复次数
arr1 = Array(1, 2, 3, 4, 5, 1, 2, 3, 6, 7, 8, 9)
Debug.Print "arr1的最小index=" & LBound(arr1)
Debug.Print "arr1的最大index=" & UBound(arr1)
arr2 = arr1 '每个元素必然至少重复1次
For I = LBound(arr1) To UBound(arr1)
m = 0
For J = LBound(arr2) To UBound(arr2)
If arr1(I) = arr2(J) Then
m = m + 1
End If
Next
Debug.Print arr1(I) & "重复了" & m & "次"
Next
End Sub
その他の方法
私は理解していませんでした
https://cloud.tencent.com/developer/article/1468729
収集方法と