You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

kdb+/q技术问询:双列表循环如何返回单一合并输出

Q语言字符串搜索结果合并问题

我正在对一个包含929个字符串的列表执行字符串搜索,同时循环遍历7个不同的搜索字符串。当前遇到的问题是,每个搜索字符串都会返回一组结果,总共返回7组,我希望将这些结果合并为单一输出,而非多次返回。

相关代码及输出如下:

q){{ss[x;y]}[;x]each exec rd from rdeFunc}each exec v from dToCol
..
q)
q)count {{ss[x;y]}[;x]each exec rd from rdeFunc}each exec v from dToCol
7
q)
q)count each {{ss[x;y]}[;x]each exec rd from rdeFunc}each exec v from dToCol
929 929 929 929 929 929 929
q)

解决方案

1. 直接展平所有结果(合并成单一长列表)

如果只是需要把7组各929个的结果堆叠成一个连续列表,用raze函数展平嵌套结构即可:

q)raze {{ss[x;y]}[;x]each exec rd from rdeFunc}each exec v from dToCol

执行后count结果会是 7*929=6503,所有匹配结果被合并为单一列表。

2. 筛选匹配任意搜索字符串的原字符串

如果你的需求是找出原929个字符串中至少匹配7个搜索字符串之一的项,而非堆叠所有匹配结果,可以调整逻辑:先提取所有搜索字符串到一个列表,再对每个原字符串检查是否匹配任意搜索项:

q)// 先提取搜索字符串列表和目标字符串列表
q)searchVals:exec v from dToCol;
q)targetRds:exec rd from rdeFunc;

q)// 对每个目标字符串,检查是否匹配任意搜索项
q){any ss[searchVals;x]} each targetRds

这样返回的是一个长度为929的列表,每个元素为布尔值(1b/0b),对应原字符串是否匹配任意搜索项;如果需要提取匹配的原字符串,再套一层where:

q)targetRds where {any ss[searchVals;x]} each targetRds

内容的提问来源于stack exchange,提问作者bashprofile84

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 12:32:17