Заменить элементы в списке, не соответствующие подстроке в KDB Q - PullRequest
3 голосов
/ 12 июня 2019

Как мне перебрать список в KDB Q и заменить элементы, которые не соответствуют определенным критериям подстроки?

Пример псевдокода логики:

list.stream()
    .forEach(x -> {
        if (x matches substring) :
            newList.add(x)
        else :
            newList.add("")
     })

Текущий список:

S: ("Lint"; "Stack"; "Linode"; "Overflow";"Linux")

Подстрока для сопоставления здесь "Li".Таким образом, строки «Стек» и «Переполнение» заменяются пустыми строками, поскольку они не содержат подстроки.

Список результатов:

S: ("Lint"; ""; "Linode"; "";"Linux")

Ответы [ 2 ]

5 голосов
/ 12 июня 2019

Условный вектор также будет работать:

q)?[S like "Li*";S;count[S]#enlist ""]
"Lint"
""
"Linode"
""
"Linux"
5 голосов
/ 12 июня 2019

Пару способов вы могли бы сделать это. Сначала выполните итерации по каждому элементу, используя условную оценку, как показано ниже:

q){$[x like "Li*";x;" "]}each S
"Lint"
" "
"Linode"
" "
"Linux"

Или используйте при применении , как показано ниже:

q)@[S;where not S like\: "Li*";:;" "]
"Lint"
" "
"Linode"
" "
"Linux"
...