如何在jq中产生笛卡尔正方形?

时间:2019-05-02 14:46:40

标签: jq cartesian-product

如何在jq中产生数组的笛卡尔平方?

输入:

[0,1,2]

输出:

[[0,0],[0,1],[0,2],
 [1,0],[1,1],[1,2],
 [2,0],[2,1],[2,2]]

我找到了使它能够与算术运算一起使用的简单方法,但是逗号运算符没有运气。

2 个答案:

答案 0 :(得分:2)

笛卡尔积

按指定顺序生成对数组的一种方法如下:

NUL

或者,避免使用$变量:

def data: [0,1,2];

data | [.[] as $i | .[] as $j | [$i, $j] ] 

m [i] [j] = [i,j]的平方矩阵

[range(0;3) | [.] + (range(0;3)|[.])]

产生:

def Mij(n):
  [ range(0;n) as $i
    | [ range(0;n) as $j
        | [$i, $j] ] ];


Mij(3)

答案 1 :(得分:0)

和其他解决方案,基于JSON的步行路径Unix工具- jtc

bash $ echo '[0,1,2]' | jtc -w'[:]<i>v[^0][:]<j>v' -T'[ {{i}}, {{j}} ]' -rj
[ [ 0, 0 ], [ 0, 1 ], [ 0, 2 ], [ 1, 0 ], [ 1, 1 ], [ 1, 2 ], [ 2, 0 ], [ 2, 1 ], [ 2, 2 ] ]
bash $ 

PS>披露:我是jtc工具的创建者