kdb沃库普。从映射到大于x的最小val的表中获取值

kdb沃库普。从映射到大于x的最小val的表中获取值,kdb,q-lang,Kdb,Q Lang,假设我有口述 d:flip(100 200 400 800 1600; 1 3 4 6 10) 如何创建一个查找函数,返回大于x的最小键的值?给一张桌子 tbl:flip `sym`val!(`a`b`c`d; 50 280 1200 1800) 我想做一些像 {[x] : update new:fun[x[`val]] from x} each tbl 最后坐在这样一张桌子上 tbl:flip `sym`val`new!(`a`b`c`d; 50 280 1200 1800; 1 4 1

假设我有口述

d:flip(100 200 400 800 1600; 1 3 4 6 10)
如何创建一个查找函数,返回大于x的最小键的值?给一张桌子

tbl:flip `sym`val!(`a`b`c`d; 50 280 1200 1800)
我想做一些像

{[x] : update new:fun[x[`val]] from x} each tbl
最后坐在这样一张桌子上

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

我想您应该使用返回下一个大于或等于
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

编辑:如果表中的值需要映射到大于
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

我想您应该使用返回下一个大于或等于
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

编辑:如果表中的值需要映射到大于
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

分步字典可能会有所帮助


分步字典可能会有所帮助


当我对字典排序时,k:asc key d我得到一个类型错误您提供的变量
d
当前不是一个字典,只是一个列表列表。我通过执行:
d:(!)来转换它。翻转d
。完美。这正是我所希望的。谢谢,当我对字典排序时,k:asc键d我得到一个类型错误您提供的变量
d
当前不是一个字典,只是一个列表列表。我通过执行:
d:(!)来转换它。翻转d
。完美。这正是我所希望的。谢谢