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

How to efficiently get the counts of values (from a list) less than some index number?

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

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

我担心 flip 操作对于大输入值可能会很昂贵。有没有更有效的方法来做到这一点?

同样简洁是件好事。

对于您的输入,您可以使用

获得相同的结果
{[n;k] k binr til n}

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

Seans 的答案可能更有效(测试一下),但为什么不将右手改为左手以避免翻转?

q)g:{[n;k] sum k<\:til n}
q)f[30;i]~g[30;i]
1b