我将如何遍历KDB Q中的列表并替换不符合某些子字符串条件的元素?
逻辑示例伪代码:
list.stream()
.forEach(x -> {
if (x matches substring) :
newList.add(x)
else :
newList.add("")
})
Run Code Online (Sandbox Code Playgroud)
当前列表:
S: ("Lint"; "Stack"; "Linode"; "Overflow";"Linux")
Run Code Online (Sandbox Code Playgroud)
要匹配的子字符串在"Li"这里。这样,字符串“ Stack”和“ Overflow”被空字符串替换,因为它们不包含子字符串。
结果列表:
S: ("Lint"; ""; "Linode"; "";"Linux")
Run Code Online (Sandbox Code Playgroud)
您可以通过几种方法进行处理。首先使用如下条件评估遍历每个元素:
q){$[x like "Li*";x;" "]}each S
"Lint"
" "
"Linode"
" "
"Linux"
Run Code Online (Sandbox Code Playgroud)
或使用at应用,如下所示:
q)@[S;where not S like\: "Li*";:;" "]
"Lint"
" "
"Linode"
" "
"Linux"
Run Code Online (Sandbox Code Playgroud)
条件向量也可以工作:
q)?[S like "Li*";S;count[S]#enlist ""]
"Lint"
""
"Linode"
""
"Linux"
Run Code Online (Sandbox Code Playgroud)