隨機生成不重復記錄的偽函數
發表時間:2024-01-30 來源:明輝站整理相關軟件相關文章人氣:
[摘要]原理:利用一個臨時數組保存好隨機范圍的數據(簡稱范圍數據)索引或標識,用rnd隨機生成臨時數組的索引。驗證臨時數組索引所對應的數據,為空則視被記錄過了,將隨機數加一后重復驗證操作直到臨時數組索引對應的數據不為空,則由一個記錄變量記錄下對應的范圍數據標識,并清空此項數據。然后進行下一個隨機操作。 偽...
原理:利用一個臨時數組保存好隨機范圍的數據(簡稱范圍數據)索引或標識,用rnd隨機生成臨時數組的索引。驗證臨時數組索引所對應的數據,為空則視被記錄過了,將隨機數加一后重復驗證操作直到臨時數組索引對應的數據不為空,則由一個記錄變量記錄下對應的范圍數據標識,并清空此項數據。然后進行下一個隨機操作。
偽函數:
'####
'## 函數參數
'## 范圍數據數組:一維數組。
'## 隨機選擇的數據量:整數。
function MyRnd(范圍數據數組,隨機選擇的數據量)
'################################################################
dim 范圍數據數組維數
dim 循環標識
dim 隨機索引
dim 隨機結果
范圍數據數組維數=ubound(范圍數據數組)
循環標識=true
if 范圍數據數組維數>隨機選擇的數據量 then
'如果 隨機選擇的數據量 大于 范圍數據數組維數 的話就不用隨機讀取了,全布都列出來就是了
Randomize Timer
隨機索引=fix(rnd*(范圍數據數組維數+1))
while 循環標識
if 范圍數據數組(隨機索引 mod 范圍數據數組)<>"" then
'數據不為空,則表示未隨機選取過。
隨機索引=范圍數據數組(隨機索引 mod 范圍數據數組)
if 隨機結果="" then
'隨機結果 以","分隔每個隨機值。
隨機結果=隨機結果 &; ","
end if
隨機結果=隨機結果 &; 范圍數據數組(隨機索引)
范圍數據數組(隨機索引)=""'清空該數據表示已隨機過。
循環標識=false'結束循環。
end if
if 隨機索引>范圍數據數組維數*3 then
'如果 隨機索引 大于 范圍數據數組維數的三倍,表示已經在 范圍數據數組維數 內歷遍過三次,跳出,防止死循環。
循環標識=false
end if
wend
end if
end function
應用:
用在隨機選取不重復的數據表記錄。
用getrows將數據表內ID標識換成一個二維數組,然后使用該函數隨機選取指定數量的ID編號以","分隔,然后用in條件式將符合隨機出來的ID編號的數據讀出來即可。
隨機選取不重復的數據。
將所有數據放到一個一維數據,然后用該函數挑隨機挑選即可。