所有
我需要获得列表的组合和排列。
已针对排列实施了一项功能。
perm:{[N;l]$[N=1;l;raze .z.s[N-1;l]{x,/:y except x}\:l]}
但是,我不知道组合,就像这样:
l: 1 2 3
comb[2;l]
1 2
1 3
2 3
l: 1 2 3 4
comb[3;l]
1 2 3
1 2 4
1 3 4
2 3 4
谢谢!
答案 0 :(得分:1)
从您的解决方案中,您可以:
q)comb:{[N;l]$[N=1;l;raze .z.s[N-1;l]{x,/:y where y>max x}\:l]}
q)comb[2;1 2 3]
1 2
1 3
2 3
使用over
的另一种方法:
q)perm:{{raze x{x,/:y except x}\:y}[;y]/[x-1;y]}
q)comb:{{raze x{x,/:y where y>max x}\:y}[;y]/[x-1;y]}
答案 1 :(得分:0)
一种选择是使用这样的排列函数:
q) comb:{[N;l] distinct asc each perm[N;l] }
q)l: 1 2 3 4
q) comb[3;l]
输出:
1 2 3
1 2 4
1 3 4
2 3 4
注意:由于asc
,这会更改元素的顺序。因此,如果您的列表中包含(1 3 2)
,则会提供(1 2 3)
。
要维护顺序,请使用任何其他函数/逻辑代替asc
来过滤集合中的重复元素(例如:(1 2 3)
和(1 3 2)
是重复的)。