parser

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

 

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

Класс hash->string и обратно. Удобная работа с множествами, подобно ^optionset.. в P2

Sikoz 12.03.2005 14:49

Класс h2s предназначен для преобразования строки в хеш и обратно.
В общем, в нем универсален один метод - @s2h[], у меня в проектах он используется по 20-50 раз - в основном для удобной работы с множествами.
Сравните:
$permissions[
$.editor(1)
$.user(1)
$.manager(1)
$.seller(1)
]
и
$permissions[^s2h[editor user manager seller]]

Методы @s2h и @h2o - обратны друг другу, также как @h2s и @createh
Последние два неплохо расширяют класс hashfile. Хотя и вряд ли когда понадобятся, мне пригодились лишь однажды - для работы с
промежуточными диагностическими данными в diagnos.ru
@CLASS
h2s

#string like "$.[$.a(1)$.b[c]]" -> hash. Usage: $my_hash[^h2s:createh[$that_string]]
@createh[str]
^process{^taint[as-is; ^$hash_^[$str^] ]}
$result[^if($hash_ is hash){$hash_}{^hash::create[]}] 

#hash to option. Usage: ^h2s:h2o[$my_hash]
@h2o[hash_;div]
$result[^hash_.foreach[k;v]{$k}[^if(def $div){$div}{ }]]

#option-like string to hash. Usage: $my_option_hash[^h2s:s2h[one|two|three;|]]
@s2h[str;div][tmp;tmpt;str1]
^if(!def $div){$div[ ]}
^if($str is hash){$result[$str]}{
  $tmp[^str.split[$div;v]]
  $tmph[^tmp.menu{^if(def $tmp.piece){$.[$tmp.piece](1)}}]
}
$result[^if($tmph is hash){$tmph}{^hash::create[]}]

#hash to string. That hash may have only string or number values!
@h2s[hash1;level][tmp;hh]
$hh(^level.int(0))  ^hh.inc(1)
^hash1.foreach[k;v]{
  ^if($v is hash){$tmp[^hash::create[$hash1.$k]] ^$.$k^[ ^h2s[$tmp;$hh] ]}{^$.$k^if($v is int || $v is double){($v)}{[$v]}}
}


  • Класс hash->string и обратно. Удобная работа с множествами, подобно ^optionset.. в P2, Sikoz 12.03.2005 14:49