0

对于t具有自定义字段的表,c我可以使用带有限制表达式的选择,但简单的选择失败:

q)r1: `n`m`k!111b;
q)r2: `n`m`k!000b;
q)t: ([]a:1 2; b:10 20; c:(r1; r2));
q)t
a b  c
----------------
1 10 `n`m`k!111b
2 20 `n`m`k!000b
q)select[2] c[`n] from t
x
-
1
0
q)select c[`n] from t
'type
  [0]  select c[`n] from t
              ^

这是一个错误,还是我错过了什么?

更新:

为什么在select [2] c[`n] from t这里工作?

4

1 回答 1

2

由于 c 是一个列表,它不支持键索引,这就是它返回一个类型的原因

您需要对每个元素进行索引,而不是尝试对列进行索引。

q)select c[;`n] from t
x
-
1
0

此上下文之外的确认字典列表相当于一个表,因此您可以像以前一样索引

q)c:(r1;r2)
q)type c
98h
q)c[`n]
10b

我想说复杂列在内存中的表示方式使得这不可能。我怀疑任何创建元素子集副本的修改都将允许列索引,因为副本将被格式化为表格。

这里的一个例子是对列进行序列化和反序列化(建议这样做)。如果select[n]是选择 2 个元素的子集

q)type exec c from t
0h
q)type exec -9!-8!c from t
98h
q)exec (-9!-8!c)[`n] from t
10b
于 2021-01-14T19:45:07.633 回答