使用变量获取KDB中的元素范围

时间:2015-02-18 05:48:47

标签: kdb q-lang

为什么我不能在KDB中使用变量内部数组?

test:1 2 3 4 5

此示例无效:

pos:3;
test[1 pos]

但这样可以正常使用

test[1 3]

2 个答案:

答案 0 :(得分:1)

如您所见,当您使用测试[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: how to reshape a list into nRows, where nRows is a variable

答案 1 :(得分:1)

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

1 2 3 7

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

a 2 3

a是一个向量。以上索引为a。简单。现在说你希望将2 3列表作为变量

b:2 3    a b //有效!

您具体询问如何从列表中获取范围,How to get range of elements in a list in KDB?

在该答案中,使用变量创建索引列表并使用结果索引到a