替换列表中与KDB Q中的子字符串不匹配的元素

时间:2019-06-12 02:36:05

标签: kdb

我将如何遍历KDB Q中的列表并替换不符合某些子字符串条件的元素?

逻辑示例伪代码:

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

当前列表:

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

此处要匹配的子字符串为"Li"。这样,字符串“ Stack”和“溢出”被空字符串替换,因为它们不包含子字符串。

结果列表:

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

2 个答案:

答案 0 :(得分:5)

您可以采取几种方法。首先使用如下条件评估迭代每个元素:

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

或使用如下所示的at apply

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

答案 1 :(得分:5)

向量条件也将起作用:

q)?[S like "Li*";S;count[S]#enlist ""]
"Lint"
""
"Linode"
""
"Linux"