当 KDB 中满足条件时从列表列表中返回值

问题描述 投票:0回答:1

我有一个包含 4 列的列表。现在我想迭代列表列表中的每个列表,以找到第一个列表,该列表的第三列具有值

ABC for first column and value 
XYZ。如果这个标准满足,我想跳出循环并返回第四列中的内容。例如,列表如下所示。

`AAA 23 `BBB  value
`AAA 23 `CCC  value
`ABC 23 `XYZ  value
`BBB 23 `CCC  value
......
..... 

我尝试做如下的事情,但这似乎不起作用。

myfunc:{if [x[0] =`ABC and x[2]=`XYZ ; val:x[3] ; 'break ] } 

@[myfunc;x; if [x[0] =`ABC and x[2]=`XYZ; :x[3]]] each ListOfList

请注意,我不想遍历整个列表列表,因为其中有数百万个列表,并且有兴趣获取匹配条件的第一个列表的值。

kdb q kdb+
1个回答
0
投票

如果列表中的所有列表至少有 4 个条目,那么执行向量比较可能比使用迭代器更有效。

list[;3]where(list[;0]=`ABC)&list[;2]=`XYZ / to get all the matching entries
list[;3]first where(list[;0]=`ABC)&list[;2]=`XYZ / to get only the first match
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.