我需要类似 Mathematica 的 Position 函数(http://reference.wolfram.com/mathematica/ref/Position.html),但在 Q 中。我的矩形矩阵解决方案如下:
q) colrow:{sz:count x; $[(count first x) = 1; enlist y; (floor y % sz; y mod sz)]}
q) position:{flip colrow[x;(where raze x = y)]}
它适用于矩形矩阵和列表:
q) t:(1 -1 1; / matrix test
-1 3 4;
1 -1 1);
q) pos1:position[t;-1] / try to find all positions of -1
q) pos1
0 1
1 0
2 1
q) t ./: pos1 / here get items
-1 -1 -1
q) l:1 0 3 0 2 3 4 1 0 / list test
q) pos2:position[l;0] / try to find all positions of 0
q) pos2
1
3
8
q) l ./: pos2 / get items
0 0 0
这可行,但最好为任意列表提供更通用的解决方案,而不仅仅是矩形矩阵。例如,上面的代码对于以下参数将无法正常工作:
position[(1 2 3; 1 2; 1 2 1 4); 1]
可能有人对此有通用解决方案吗?