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