iasc与q kdb中的等级之间的关系

时间:2019-06-06 06:16:17

标签: kdb

我的理解是iasc和rank在内部按以下顺序工作:
iasc:逐步执行程序直到排名

original: 2 7 3 2 5 / 0->2, 1->7, 2->3, 3->2, 4->5 //Index item mapping
asc original returns 2 2 3 5 7 / 0->2, 1->2, 2->3, 3->5, 4->7 // Index item mapping 
iasc original returns  0 3 2 4 1 / 0->0, 1->3, 2->2, 3->4, 5->1 // Index item mapping /// iasc using asc internally
asc iasc original returns 0 1 2 3 4 / 0->0, 1->1, 2->2, 3->3, 4->4 // Index item mapping
iasc iasc original returns 0 4 2 1 3 // hence it is equal to rank original

等级:

original: 2 7 3 2 5 / 0->2, 1->7, 2->3, 3->2, 4->5 //Index item mapping
asc original returns 2 2 3 5 7 / 0->2, 1->2, 2->3, 3->5, 4->7 // Index item mapping 
rank original -> 0 4 2 1 3 / rank of orignal items of list in sorted list /// rank using asc internally

但是当我看到iasc和rank的代码时,它们两个都在内部使用了rank。 能否请您告诉我IASC和等级是如何在内部运作的(我的理解不正确)?

1 个答案:

答案 0 :(得分:4)

您说iasc iasc等同于使用rank是正确的。如果您查看函数iascrank的内部,您会发现它们非常相似:

q)rank
k){$[0h>@x;'`rank;<<x]}
q)iasc
k){$[0h>@x;'`rank;<x]}

在这种情况下,k代码<将与iasc做相同的工作,因此rank本质上在内部使用iasc iasc,因为<<iasc iasc的k个代码。

当您说它们都在内部使用排名时,您可能是指'`rank,如果使用列表以外的其他东西,则该函数将引发错误,因为该函数使用if-else来确定如果输入是列表。