q / KDB Как выполнить итерацию по списку строк

#kdb

Вопрос:

Я недавно начал изучать язык программирования q, и мне это немного сложно, так как я исхожу из «традиционного» императива, ООП и т. Д. Языковой фон. Я пытаюсь выполнить, казалось бы, простую задачу — найти строки в списке, содержащие определенный символ:

 names:("Saint Denis";"Rhodes";"Strawberry";"Valentine")
 

Как напечатать все строки, содержащие букву «R»? Еще лучше, как «Р», так и «р»?

Самое большее, что мне удалось сделать, это:

 {[x]x?"o"} each names
 

Каков был бы правильный подход?

Заранее спасибо!

Ответ №1:

Вы можете использовать like ключевое слово с регулярным выражением, например:

 q)names where names like "*[Rr]*"
"Rhodes"
"Strawberry"
 

Ответ №2:

Вы могли бы использовать что-то вроде приведенного ниже

 q)names where "R" in/: names
"Rhodes"
q)names where any each "rR" in/: names
"Rhodes"
"Strawberry"
 

Ответ №3:

Еще пара альтернатив таковы:

 q)names where "r" in'lower names
"Rhodes"
"Strawberry"

q)names where any"Rr"in':names
"Rhodes"
"Strawberry"