1
0
mirror of https://github.com/stedolan/jq.git synced 2024-05-11 05:55:39 +00:00

Add combinations/0 and combinations/1

This commit is contained in:
Santiago Lapresta
2015-06-04 18:30:38 +02:00
committed by Nicolas Williams
parent 8aecf82bfe
commit ec7647c4ab
2 changed files with 26 additions and 1 deletions

View File

@@ -1486,7 +1486,17 @@ static const char* const jq_builtins[] = {
"def first: .[0];",
"def last: .[-1];",
"def nth($n): .[$n];",
// # transpose a possibly jagged matrix, quickly;
"def combinations:"
" if length == 0 then [] else"
" .[0][] as $x"
" | (.[1:] | combinations) as $y"
" | [$x] + $y"
" end;",
"def combinations(n):"
" . as $dot"
" | [range(n) | $dot]"
" | combinations;",
// # transpose a possibly jagged matrix, quickly;
// # rows are padded with nulls so the result is always rectangular.
"def transpose:"
" if . == [] then []"

View File

@@ -1307,6 +1307,21 @@ sections:
input: '["foobar", "barfoo"]'
output: ['[false, true]']
- title: "`combinations`, `combinations(n)`"
body: |
Outputs all combinations of the elements of the arrays in the
input array. If given an argument `n`, it outputs all combinations
of `n` repetitions of the input array.
examples:
- program: 'combinations'
input: '[[1,2], [3, 4]]'
output: ['[1, 3]', '[1, 4]', '[2, 3]', '[2, 4]']
- program: 'combinations(2)'
input: '[0, 1]'
output: ['[0, 0]', '[0, 1]', '[1, 0]', '[1, 1]']
- title: "`ltrimstr(str)`"
body: |