если нам надо сгенерировать случайно число A - M раз, чило B - K раз и тд
то смотрим суда
вот сам код в два типа
Type TGeneratorPair
Field Number%
Field Count%
End Type
Type TGeneratorNums
Field List:TList
Method AddNum(num%,count%)
If Not List Then List = New TList
Local pair:TGeneratorPair = New TGeneratorPair
pair.Number = num
pair.Count = count
List.AddLast(pair)
End Method
Method GetValue%()
If Not List Then Return -1
Local pair:TGeneratorPair = TGeneratorPair(List.ValueAtIndex(Rand(0,List.Count()-1)))
pair.Count:-1
If pair.Count < 1 Then List.Remove(pair)
If List.Count() = 0 Then List = Null
Return pair.Number
End Method
End Type
вот как юзать (вбивал в браузере .. )
Local gen:TGeneratorNums = new TGeneratorNums
' AddNum(число , сколько раз)
gen.AddNum(1,4)
gen.AddNum(4,5)
gen.AddNum(7,6)
Local num%
While num <> -1
num = gen.GetValue()
if num <> -1 then debuglog num
wend
gen = null
операция List.ValueAtIndex тормозная в стандартной либе БМ
потому для максимального быстродействия списком юзаем мою модификацию