Оптимизировать функцию для преобразования каждого символа строки в символ в q kdb - PullRequest
0 голосов
/ 16 января 2020

Мне нужно написать функцию, которая принимает целое число в качестве входного аргумента, и возвращать список символов в алфавитном порядке для этих многих символов.

Например. Скажем, если вход для функции равен 4, то выход должен быть a b c d. PS если вход 27, то выход может быть z, а затем повторяться.

Решение, которое я придумал:

q)f:{(`$(x;0N)#x#.Q.a)}
q)f 4
`a`b`c`d
q)f 5
`a`b`c`d`e

Может кто-нибудь предложить мне лучшее / оптимизированное решение ?
Кроме того, есть ли лучший способ преобразовать строку в список символов, отличных от

{(`$(x;0N)#x#.Q.a)}

Ответы [ 3 ]

4 голосов
/ 16 января 2020

Я думаю, что ниже должно быть то, что вы после:

q) {`$'x#.Q.a}5
`a`b`c`d`e
3 голосов
/ 16 января 2020

Вы можете попробовать один из следующих вариантов:

{`$/:x#.Q.a}

, где приведение к символу `$ применяется к каждому элементу справа.

2 голосов
/ 16 января 2020

Если вы планируете использовать эту функцию для списка / вектора целых чисел, тогда этот квазивекторизованный подход должен быть быстрее, чем каждая функция:

q){x#\:`$'.Q.a}5 1 10 28
`a`b`c`d`e
,`a
`a`b`c`d`e`f`g`h`i`j
`a`b`c`d`e`f`g`h`i`j`k`l`m`n`o`p`q`r`s`t`u`v`w`x`y`z`a`b
...