parser

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

 

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

Ответ

G_Z 31.12.2017 06:30

Для полноценного поиска лучше использовать базу данных, а не заниматься перекладыванием данных и их перебором.

Складывать в таблицу и использовать process, чтобы искать по элементарному совпадению строк бессмысленно.
@main[]
$hash[^json:parse[{
	"name":"keys",
	"count":"2",
	"created":"1514657168",
	"updated":"1514659786",
	"data":[
		{"id":"ce95c0ccfed2d119","email":"mail@mail.com","server":"example.ru","active":"","license":"c4205307-ef4b-4ba9-a4b6-c9b1ec575358","api":"0737618b-7e3e-4db4-a95a-5053663cc42f","secret":"576a1c21510241bc","public":"2a86503501a33577","access":"","reload":"","created":"1514657168","expires":"1546193168"},
		{"id":"ebed23804532d852","email":"mail@mail.com","server":"example.com","active":"","license":"854a3f3a-22d3-4b9e-8f8b-da6c11f8ebe7","api":"fbc6c4e5-ef77-4d17-adb9-8deade1ade00","secret":"9286bc5916af8835","public":"4e42b91262df310d","access":"","reload":"","created":"1514659786","expires":"1546195786"}
	]
}]]
$selected[^select[$hash.data][
	$.email[mail@mail.com]
	$.server[example.ru]
]]
<pre>^json:string[$selected;$.indent(true)]</pre>

@select[data;condition]
$result[^hash::create[]]

$target[^stamp[$condition]]

^data.foreach[index;item]{
	$stamp[^stamp[^item.intersection[$condition]]]

	^if($stamp eq $target){
		$result.$index[$item]
	}
}

@stamp[hash]
$result[^math:md5[^hash.foreach[key;value]{$key=$value}]]
Ещё быстрее будет, если сначала скомпилировать функцию поиска по заранее заданному списку искомых полей, а потом её использовать без пересечения хешей и перебора ключей.

Зачем используется CSS-стиль для «комментариев» — отдельная загадка.