我将如何遍历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")
答案 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"