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