我有兩個陣列:
randomArray= Array("dog", "cat", "fish")
inputArray= Array("dog", "dog", "cat", "cat", "cat", "dog", "fish", "fish", "fish")
如何使用 randomArray 中的隨機專案替換 inputArray 專案以創建 outputArray,如下所示:
outputArray= Array("fish", "fish", "dog", "dog", "dog", "fish", "cat", "cat", "cat")
例如,您可以看到所有“狗”字都替換為“魚”。使用 if 陳述句并不簡單,因為 randomArray 有大約 500 個專案,而 inputArray 有大約 6000 個專案。我可以為此使用回圈,但我的問題是,在這種方法中,專案在回圈期間一遍又一遍地變化,這既增加了時間又減少了輸出陣列中的專案種類。
我認為最好的方法是重新排列所有相同專案的索引。例如將 inputArray(1) 和 inputArray (2) 更改為 inputArray(10) 和 inputArray (11)。和 inputArray(7) 和 inputArray (8) inputArray(9) 到 inputArray(1) 和 inputArray (2) inputArray(3)。
怎么能這樣做?
uj5u.com熱心網友回復:
Sub generateRandomArray()
randomArray = Array("dog", "cat", "fish")
inputArray = Array("dog", "dog", "cat", "cat", "cat", "dog", "fish", "fish", "fish")
outputArray = inputArray
low = LBound(randomArray)
high = UBound(randomArray)
If low = high Then
Exit Sub
End If
Dim usedString As String: usedString = ""
Dim randomIndex As Integer
Dim i As Long, j As Long
For i = low To high
Randomize
randomIndex = i
While randomIndex = i Or InStr(1, usedString, randomArray(randomIndex))
randomIndex = Int((high - low 1) * Rnd low)
Wend
usedString = usedString & "." & randomArray(randomIndex)
For j = LBound(inputArray) To UBound(inputArray)
If inputArray(j) = randomArray(i) Then
outputArray(j) = randomArray(randomIndex)
End If
Next j
Next i
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/440540.html
標籤:vba
