明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

隨機(jī)生成不重復(fù)記錄的偽函數(shù)

[摘要]原理:利用一個(gè)臨時(shí)數(shù)組保存好隨機(jī)范圍的數(shù)據(jù)(簡稱范圍數(shù)據(jù))索引或標(biāo)識(shí),用rnd隨機(jī)生成臨時(shí)數(shù)組的索引。驗(yàn)證臨時(shí)數(shù)組索引所對(duì)應(yīng)的數(shù)據(jù),為空則視被記錄過了,將隨機(jī)數(shù)加一后重復(fù)驗(yàn)證操作直到臨時(shí)數(shù)組索引對(duì)應(yīng)的數(shù)據(jù)不為空,則由一個(gè)記錄變量記錄下對(duì)應(yīng)的范圍數(shù)據(jù)標(biāo)識(shí),并清空此項(xiàng)數(shù)據(jù)。然后進(jìn)行下一個(gè)隨機(jī)操作。 偽...

原理:利用一個(gè)臨時(shí)數(shù)組保存好隨機(jī)范圍的數(shù)據(jù)(簡稱范圍數(shù)據(jù))索引或標(biāo)識(shí),用rnd隨機(jī)生成臨時(shí)數(shù)組的索引。驗(yàn)證臨時(shí)數(shù)組索引所對(duì)應(yīng)的數(shù)據(jù),為空則視被記錄過了,將隨機(jī)數(shù)加一后重復(fù)驗(yàn)證操作直到臨時(shí)數(shù)組索引對(duì)應(yīng)的數(shù)據(jù)不為空,則由一個(gè)記錄變量記錄下對(duì)應(yīng)的范圍數(shù)據(jù)標(biāo)識(shí),并清空此項(xiàng)數(shù)據(jù)。然后進(jìn)行下一個(gè)隨機(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)識(shí)
dim 隨機(jī)索引
dim 隨機(jī)結(jié)果
范圍數(shù)據(jù)數(shù)組維數(shù)=ubound(范圍數(shù)據(jù)數(shù)組)
循環(huán)標(biāo)識(shí)=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)識(shí)
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é)果 以","分隔每個(gè)隨機(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)識(shí)=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)識(shí)=false
end if
wend
end if
end function

應(yīng)用:
用在隨機(jī)選取不重復(fù)的數(shù)據(jù)表記錄。
用getrows將數(shù)據(jù)表內(nèi)ID標(biāo)識(shí)換成一個(gè)二維數(shù)組,然后使用該函數(shù)隨機(jī)選取指定數(shù)量的ID編號(hào)以","分隔,然后用in條件式將符合隨機(jī)出來的ID編號(hào)的數(shù)據(jù)讀出來即可。
隨機(jī)選取不重復(fù)的數(shù)據(jù)。
將所有數(shù)據(jù)放到一個(gè)一維數(shù)據(jù),然后用該函數(shù)挑隨機(jī)挑選即可。