0

为什么我不能在 KDB 的数组范围内使用变量?

test:1 2 3 4 5

此示例不起作用:

pos:3;
test[1 pos]

但这样就可以了

test[1 3]
4

2 回答 2

1

如您所见,当您使用 test[1 3] 时,(1 3) 是一个列表。所以向量变量需要一个列表。

   q) list1:1 3
   q) test[list1]

所以你必须使用:

   q)n:3
   q)list1:(1;n)
   q)test[list1]
   q)test[(1;n)]  / alternate way

有关为什么只有分号不起作用以及为什么我们需要括号 '()' 的详细说明,请查看我对这篇文章的回答:

kdb/q:如何将列表重塑为 nRows,其中 nRows 是一个变量

于 2015-02-18T09:39:17.560 回答
1

要了解您的要求,请考虑:

1 2 3 7

这是一个简单的整数列表。现在考虑:

一个 2 3

a向量在哪里。上述索引为a. 简单的。现在说你想将该2 3列表作为变量

b:2 3 ab //有效!

您特别询问如何从列表中获取范围,这在如何获取 KDB 中列表中的元素范围?

在那个答案中,使用变量来创建索引列表并使用结果来索引a

于 2015-02-18T09:45:28.953 回答