2 Вопрос: Как произвести декартову площадь в JQ?

вопрос создан в Thu, May 2, 2019 12:00 AM

Как получить декартовой квадрат массива в jq?

Input:

[0,1,2]

Вывод:

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

Я нашел простой способ заставить его работать с арифметическими операциями, но не повезло с оператором запятой.

    
1
2 ответа                              2                         

декартово произведение

Один из способов создания массива пар в указанном порядке будет следующим:

def data: [0,1,2];

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

В качестве альтернативы, избегая $-переменных:

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

Квадратная матрица с m [i] [j] = [i, j]

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


Mij(3)

дает:

[[[0,0],[0,1],[0,2]],[[1,0],[1,1],[1,2]],[[2,0],[2,1],[2,2]]]
    
2
2019-05-02 23: 06: 39Z
  1. Я полагаю, у вас есть один избыточный уровень глубины. Что-то вроде [.[] as $i | .[] as $j | [$i, $j]] будет работать.
    2019-05-02 14: 56: 44Z

и альтернативное решение, основанное на инструменте Unix с обходным путем для JSON - 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 &GT; Раскрытие информации: я создатель инструмента jtc

    
0
2019-05-02 16: 34: 58Z
источник размещен Вот