parser

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

 

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

Сойдет за пример? :)

moko 23.09 23:13 / 23.09 23:14

Допустим мы решили средствами парсера найти самый длинный тред на форуме. Код позволяет использовать как хеш, так и массив, но с разряженным массивом получается немного быстрее (в среднем ~0.10 секунды против ~0.12 секунды). И это учитывая, что в данном массиве 85% дырок.
Если говорить более глобально, то почти любой хеш с цифровыми ключами — это кандидат на использование разряженного массива. Например, справочники id/значение, в базах данных нередко половина таблиц — такие справочники.
@main[]

$data[^oSQL.table{SELECT thread_id as id FROM forum_message}]

$tmp[^if($form:hash eq 'yes'){^hash::create[]}{^array::create[]}]

before: ^rusage[]<br/>
^data.menu{
	$id[$data.id]
	$tmp.$id($tmp.$id+1)
}
after: ^rusage[]<br/>

$top[^hash::create[]]
^tmp.foreach[k;v]{
	^if($v>$top.v){
		$top[ $.id[$k] $.v[$v] ]
	}
}
Longest thread: $top.id with $top.v messages (from ^tmp.count[] threads with ^data.count[rows] messages)

@rusage[]
$cpu[$status:rusage.utime]
^if(def $ocpu)($cpu-$ocpu)[0] gc_memory($status:memory.used/$status:memory.free)
$ocpu[$cpu]