kdb 卷起。从映射到大于 x 的最小值的 table 获取值

kdb voolkup. get value from table that is mapped to smallest val larger than x

假设我有一个字典

d:flip(100 200 400 800 1600; 1 3 4 6 10)

如何创建一个 returns 大于 x 的最小键的值的查找函数?给定一个 table

tbl:flip `sym`val!(`a`b`c`d; 50 280 1200 1800)

我想做类似

的事情
{[x] : update new:fun[x[`val]] from x} each tbl

最终达到这样的 table

tbl:flip `sym`val`new!(`a`b`c`d; 50 280 1200 1800; 1 4 10 0N)

sym val new
a   50    1
b   280   4
c   1200  10
d   1800

我想你会想用binr到return下一个大于或等于x的元素。请注意,您应该使用排序列表才能正常工作。对于上面的示例,将 d 转换为带有 d:(!). flip d 的字典我想出了:

q)k:asc key d
q)d k k binr tbl`val
1 4 10 0N
q)update new:d k k binr val from tbl
sym val  new
------------
a   50   1
b   280  4
c   1200 10
d   1800

从哪里获取要使用的字典键:k k binr tbl`val

编辑:如果 table 中的值需要映射到大于 x 但不等于的值,您可以尝试:

q)show tbl:update val:100 from tbl where i=0
sym val
--------
a   100
b   280
c   1200
d   1800
q)update new:d k (k-1) binr val from tbl
sym val  new
------------
a   100  3
b   280  4
c   1200 10
d   1800

阶梯式词典可能会有所帮助 http://code.kx.com/q/cookbook/temporal-data/#stepped-attribute

q)d:`s#-0W 100 200 400 800 1600!1 3 4 6 10 0N
q)d 50 280 1200 1800
1 4 10 0N