使用kdb生成唯一的随机数列表,其中的数字不应与列表中数字的索引相同

时间:2019-12-12 04:24:08

标签: kdb

我需要编写一个函数,该函数生成唯一的随机数列表,其中的数字不应与列表的索引相同。

Valid output - 1 3 2 0  
Invalid output - 0 3 2 1 /- Number 0 and index 0 are same
Invalid output - 1 0 2 3 /- Number 2 and 3 matches with index

我可以考虑使用Deal函数(?),但列表中的数字与索引匹配

-5?5

我可以对种子做些什么,使其生成与数字索引不同的数字吗?
  其他任何没有滚动/交易功能(?)的解决方案也将有很大帮助。

编辑: 我提出了以下解决方案-(欢迎使用其他/优化方法)

{$[max(til x)=o:{neg[x]?x}x;.z.s[x];o]}

1 个答案:

答案 0 :(得分:3)

可能有几种方法可以做到这一点。我想到了这个:

q){$[any (r:neg[x]?x)=til x;.z.s x;r]}5
3 2 4 0 1
q){$[any (r:neg[x]?x)=til x;.z.s x;r]}5
2 0 4 1 3

生成随机列表,然后如果任何索引匹配,它将生成另一个列表,直到没有索引匹配为止。