“如何使用类型”;";及;";在kdb中
当我使用“如何使用类型”;";及;";在kdb中,kdb,Kdb,当我使用metatablename检查类型时。得到以下结果: c t f a `description "C" 现在我想知道类型“c”和“c”之间的区别。以及如何将类型“c”转换为“c” 从下面的解释中,我可以得到当表中有“c”类型时,我可以将其转换为“c”类型。我的新问题如下: 表1: ([ID:`1`2`3]Name:`A`B`C;Client:`P`Q`S;Species:`setosa`setosa`setosa ;Le
metatablename
检查类型时。得到以下结果:
c t f a
`description "C"
现在我想知道类型“c”
和“c”
之间的区别。以及如何将类型“c”
转换为“c”
从下面的解释中,我可以得到当表中有“c”类型时,我可以将其转换为“c”类型。我的新问题如下:
表1:
([ID:`1`2`3]Name:`A`B`C;Client:`P`Q`S;Species:`setosa`setosa`setosa ;Length:2 34 6)
显示如下:
ID Name Client Species Length
1 A B setosa 2
2 B Q setosa 34
3 C S setosa 6
我想为表1编写一个简单的api:
.get.table1:{[Params]
if[Params~();Params:()!()];
select ID:ID,NAME:Name,CLIENT:Client,SPECIES:Species,LENGTH:Length,DESCRIP:count[i]#enlist "" from table1
}
结果:.get.table1[]
ID NAME CLIENT SPECIES LENGTH DESCRIP
1 A B setosa 2 ""
2 B Q setosa 34 ""
3 C S setosa 6 ""
元表1:
c t f a
ID s
NAME s
CLIENT s
LENGTH j
DESCRIP C
现在,我想更改api的编写风格,以获得与上述api相同的结果。我应该怎么做?(如何描述描述行)
类型“c”表示列中的每个元素都是原子的,而类型“c”表示列中的每个元素都是该类型的列表。要从“c”转换为“c”,您可以登记每个字符,使其成为一个列表
q) meta ([] c:"123")
c| t f a
-| -----
c| c
q) meta ([] c:enlist each "123")
c| t f a
-| -----
c| C
查询字符串列将效率低下。如果列中有一小组经常重复的不同值,则将列强制转换为符号列将更有效类型“c”表示列中的每个元素都是原子的,而类型“c”表示列中的每个元素都是该类型的列表。要从“c”转换为“c”,您可以登记每个字符,使其成为一个列表
q) meta ([] c:"123")
c| t f a
-| -----
c| c
q) meta ([] c:enlist each "123")
c| t f a
-| -----
c| C
查询字符串列将效率低下。如果列中有一小组经常重复的不同值,则将列强制转换为符号列将更有效类型“c”是单个字符(atom)。类型“C”是字符列表。以下是一些可能有助于说明问题的示例:
q)tbl:([] col:"abc")
q)meta tbl
c | t f a
---| -----
col| c
q)tbl
col
---
a
b
c
q)update col:enlist each col from `tbl / "cast"
`tbl
q)meta tbl
c | t f a
---| -----
col| C
q)tbl
col
----
,"a"
,"b"
,"c"
所以“演员”只是一个应征者。如果列中混合了原子和列表,请小心,因为“每个都登记”并不能满足您的需要。你必须有条件地登记那些仅仅是原子的值,使用类似这样的东西
q)enl:{$[0h>type x;enlist x;x]}
q)update col:enl each col from `tbl
类型“c”是单个字符(原子)。类型“C”是字符列表。以下是一些可能有助于说明问题的示例:
q)tbl:([] col:"abc")
q)meta tbl
c | t f a
---| -----
col| c
q)tbl
col
---
a
b
c
q)update col:enlist each col from `tbl / "cast"
`tbl
q)meta tbl
c | t f a
---| -----
col| C
q)tbl
col
----
,"a"
,"b"
,"c"
所以“演员”只是一个应征者。如果列中混合了原子和列表,请小心,因为“每个都登记”并不能满足您的需要。你必须有条件地登记那些仅仅是原子的值,使用类似这样的东西
q)enl:{$[0h>type x;enlist x;x]}
q)update col:enl each col from `tbl
还有一种方法:
q)t:([] x:"abc")
q)meta update ("",/:x) from t
c| t f a
-| -----
x| C
附加空字符串的好处在于,如果元素已经是列表,那么它不会产生任何影响
q)t:([] x:"",/:"abc") / each element is already a list
meta[t]~meta update ("",/:x) from t
但是,应用登记
会将数据类型更改为异构列表(类型0h
):
还有一种方法:
q)t:([] x:"abc")
q)meta update ("",/:x) from t
c| t f a
-| -----
x| C
附加空字符串的好处在于,如果元素已经是列表,那么它不会产生任何影响
q)t:([] x:"",/:"abc") / each element is already a list
meta[t]~meta update ("",/:x) from t
但是,应用登记
会将数据类型更改为异构列表(类型0h
):