Как произвести декартову площадь в JQ? - PullRequest
1 голос
/ 02 мая 2019

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

Введите:

[0,1,2]

Выход:

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

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

Ответы [ 2 ]

2 голосов
/ 02 мая 2019

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

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

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]]]
0 голосов
/ 02 мая 2019

и альтернативное решение, основанное на Unix-инструменте Walk-Path для 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> Раскрытие информации: I 'м создатель инструмента jtc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...