如何有效地获取小于某个索引号的值的计数(从列表中)?

Che*_*vas 1 kdb

我很难用语言描述这个函数的作用,但我有一些工作代码。

f:{[n;k] sum flip k </: til n}
i:i: 3 4 6 7 13;
f[30;i]
0 0 0 0 1 2 2 3 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5i
Run Code Online (Sandbox Code Playgroud)

担心flip对于大输入值,该操作可能会很昂贵。有没有一种方法可以在不翻转的情况下更有效地做到这一点?

同样简洁将是一个很好的选择。

Sea*_*hir 5

对于您的输入,您可以获得相同的结果

{[n;k] k binr til n}
Run Code Online (Sandbox Code Playgroud)

只要k保持升序,这应该有效。binr 的文档在这里: https: //code.kx.com/q/ref/bin/