parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

да Misha v.3, ты прав, так попроще будет, только вот с хэшем $added не очень разобрался

Артём 06.02.2003 15:43

да действительно, не стоит делать из этого класс, лучше метод.
че-то я не понял, юзал твой код, близнецы всё равно выскакивают.

я так понял что в хэше $added ключи у нас номера случайных $rand строчек, а значения всех ключей 1. и проверка смотрит есть ли уже такой ключ.

тогда по идее если в $source_table всего три строки, и $quant равен 3, то в $result длжны быть эти же три строки в произвольном поредке. а если $quant > $count то тогда по идее вся эта метода вообще должна зацикливотся.

может я че-то не правильно понял, не опытный я ещё.

да ещё, random может работать, если минимум $count=3
@revolver[source_table;quant][added;rand_code;count]

# $count засовываю в переменную, чтобы не доставать 
# в процессе выполнения $rand_code каждый раз ее из $source_table
$count(^source_table.count[])
^if($count <= 3){
	$result[]
}{
	$result[^source_table.select(0)]

#	# хеш, куда пишем то, что уже добавили в результат.
#	# нужно, чтобы не было дублирования
	$added[^hash::create[]]
	
#	# код, который вычисляет нам в цикле случайную строку
	$rand_code{^eval(^math:random($count)+1)}
	^while($quant > ^result.count[]){
		$rand($rand_code)
		^while($added.[$rand]){$rand($rand_code)}
		^result.join[^source_table.select(^source_table.line[] == $rand))]
		^added.add[$.$rand(1)]
	}
}
#end @revolver[]