KDB:尝试捕获列表并返回失败列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KDB:尝试捕获列表并返回失败列表相关的知识,希望对你有一定的参考价值。

我想运行该功能

{`$安全X}

在列表上

order`KDB_SEC_ID

并返回失败的值列表。我有下面的,它有效,但我想知道是否有一种更简洁的方式来写这个没有使用do循环。

示例代码:

idx:0; 
fails:(); 
do[count (order`KDB_SEC_ID); 
  error:@[{`Security$x};(order`KDB_SEC_ID)[idx];0Nj];
  if[error=0Nj;fails:fails,(order`KDB_SEC_ID)[idx]];
  idx:idx+1;
  ];
  missingData:select from order where KDB_SEC_ID in distinct fails;
答案

我同意Terry的答案是最简单的方法,但这里有一个更简单的方法来做你试图帮助你看看如何在不使用do循环的情况下实现它的方法

q)SECURITY
`AAPL`GOOG`MSFT

q)order
KDB_SEC_ID val
--------------
AAPL       1
GOOG       2
AAPL       3
MSFT       4
IBM        5

q)order where @[{`SECURITY$x;0b};;1b] each order`KDB_SEC_ID
KDB_SEC_ID val
--------------
IBM        5

如果它通过则输出0b,如果失败则输出1b,从而产生布尔列表。在布尔列表上使用where返回1b出现的索引,您可以使用它来索引order以返回失败的行。

另一答案

如果你的测试要检查哪个KDB_SEC_ID可以列举到Security列表,你不能做

q)select from order where not KDB_SEC_ID in Security

或者我错过了什么?

要在更一般的情况下回答您的问题,您可以在列表上实现try-catch,以使用类似的方式返回失败列表

q){x where @[{upper x;0b};;1b] each x}(2;`ab;"Er";1)
2 1

以上是关于KDB:尝试捕获列表并返回失败列表的主要内容,如果未能解决你的问题,请参考以下文章

在 Kdb 中,如何将每个符号列表分配给值列表

Android,从其他片段返回的空列表视图

如何保存具有列表视图的片段状态

如何从片段内的列表视图打开链接网址?

从活动创建片段时getView返回null

Android,列表适配器在getView中返回错误的位置