Skip to content

Join ​

The concatenation of the argument collections, in order.

✓ checked against that system · ! checked, with disagreements (hover a chip)Wolfram LanguageJoin✓
Join(a, b, …)the concatenation of the collections, in order.
Join(a, b, …, n)corresponding sublists n-1 levels down joined pairwise, instead of the top level.
Typed signatures
TypePackageApplies
((T+) -> T where T: string) & ((collection<any>*) -> collection)combinatoricsreplaces compute-enginealways
((T+) -> T where T: string) & ((collection<any>*) -> collection)compute-enginealways

Domain: Collections

Details
  • Join(A,B)=Flatten({A,B},1)Join(A, B) = Flatten(\{A, B\}, 1). See Flatten.
  • The argument collections don't need to be ListList, but must all share the same head.
  • A trailing integer argument joins at that level instead of the top level.
  • See Append for adding a single element rather than concatenating collections.

Examples

3 more kept as data, checked against the oracles
Basic #
live ↗
InJoin([1,2],[3,4])\mathrm{Join}(\bigl\lbrack1, 2\bigr\rbrack, \bigl\lbrack3, 4\bigr\rbrack)Out[1,2,3,4]\bigl\lbrack1, 2, 3, 4\bigr\rbrack
live ↗
InJoin([1,2],[3,4],[5])\mathrm{Join}(\bigl\lbrack1, 2\bigr\rbrack, \bigl\lbrack3, 4\bigr\rbrack, \bigl\lbrack5\bigr\rbrack)Out[1,2,3,4,5]\bigl\lbrack1, 2, 3, 4, 5\bigr\rbrack
live ↗
InJoin([a,b,c],[x,y],[u,v,w])\mathrm{Join}(\bigl\lbrack a, b, c\bigr\rbrack, \bigl\lbrack x, y\bigr\rbrack, \bigl\lbrack u, v, w\bigr\rbrack)Out[a,b,c,x,y,u,v,w]\bigl\lbrack a, b, c, x, y, u, v, w\bigr\rbrack
Scope #

A trailing integer argument joins at that level rather than the top level

live ↗
InJoin([[1,2],[3,4]],[[5,6],[7,8]],2)\mathrm{Join}(\bigl\lbrack\bigl\lbrack1, 2\bigr\rbrack, \bigl\lbrack3, 4\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack5, 6\bigr\rbrack, \bigl\lbrack7, 8\bigr\rbrack\bigr\rbrack, 2)Out[[1,2,5,6],[3,4,7,8]]\bigl\lbrack\bigl\lbrack1, 2, 5, 6\bigr\rbrack, \bigl\lbrack3, 4, 7, 8\bigr\rbrack\bigr\rbrack

Joining matrices stacks their rows

live ↗
InJoin([[a,b],[c,d]],[[1,2],[3,4]])\mathrm{Join}(\bigl\lbrack\bigl\lbrack a, b\bigr\rbrack, \bigl\lbrack c, d\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack1, 2\bigr\rbrack, \bigl\lbrack3, 4\bigr\rbrack\bigr\rbrack)Out[[a,b],[c,d],[1,2],[3,4]]\bigl\lbrack\bigl\lbrack a, b\bigr\rbrack, \bigl\lbrack c, d\bigr\rbrack, \bigl\lbrack1, 2\bigr\rbrack, \bigl\lbrack3, 4\bigr\rbrack\bigr\rbrack

Sets as well as lists, as long as all arguments share the head

live ↗
InJoin({1,2},{3})\mathrm{Join}(\lbrace1, 2\rbrace, \lbrace3\rbrace)Out{1,2,3}\lbrace1, 2, 3\rbrace

A lazy Range is spliced in

live ↗
InJoin([1,2],3..5)\mathrm{Join}(\bigl\lbrack1, 2\bigr\rbrack, 3..5)Out[1,2,3,4,5]\bigl\lbrack1, 2, 3, 4, 5\bigr\rbrack

With no arguments, the empty list

live ↗
InJoin()\mathrm{Join}()Out[]\bigl\lbrack\bigr\rbrack

At level 2, matrices are joined side by side

live ↗
InJoin([[a,b],[c,d]],[[1,2],[3,4]],2)\mathrm{Join}(\bigl\lbrack\bigl\lbrack a, b\bigr\rbrack, \bigl\lbrack c, d\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack1, 2\bigr\rbrack, \bigl\lbrack3, 4\bigr\rbrack\bigr\rbrack, 2)Out[[a,b,1,2],[c,d,3,4]]\bigl\lbrack\bigl\lbrack a, b, 1, 2\bigr\rbrack, \bigl\lbrack c, d, 3, 4\bigr\rbrack\bigr\rbrack

Ragged rows join at level 2 too

live ↗
InJoin([[1],[5,6]],[[2,3],[7]],[[4],[8]],2)\mathrm{Join}(\bigl\lbrack\bigl\lbrack1\bigr\rbrack, \bigl\lbrack5, 6\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack2, 3\bigr\rbrack, \bigl\lbrack7\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack4\bigr\rbrack, \bigl\lbrack8\bigr\rbrack\bigr\rbrack, 2)Out[[1,2,3,4],[5,6,7,8]]\bigl\lbrack\bigl\lbrack1, 2, 3, 4\bigr\rbrack, \bigl\lbrack5, 6, 7, 8\bigr\rbrack\bigr\rbrack

A row missing from the shorter array simply isn't merged in

live ↗
InJoin([[x]],[[1,2],[3,4]],2)\mathrm{Join}(\bigl\lbrack\bigl\lbrack x\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack1, 2\bigr\rbrack, \bigl\lbrack3, 4\bigr\rbrack\bigr\rbrack, 2)Out[[x,1,2],[3,4]]\bigl\lbrack\bigl\lbrack x, 1, 2\bigr\rbrack, \bigl\lbrack3, 4\bigr\rbrack\bigr\rbrack

Any head, as long as all the arguments share it

live ↗
InJoin(f(a),f(b))\mathrm{Join}(f(a), f(b))Outf(a,b)f(a, b)
live ↗
InJoin(aa,bb)\mathrm{Join}(\mathrm{aa}, \mathrm{bb})OutJoin(aa,bb)\mathrm{Join}(\mathrm{aa}, \mathrm{bb})
Properties #

Join(A,B)=Flatten({A,B},1)Join(A, B) = Flatten(\{A, B\}, 1). See Flatten

live ↗
InJoin([1,2],[3,4])=Flatten([[1,2],[3,4]],1)\mathrm{Join}(\bigl\lbrack1, 2\bigr\rbrack, \bigl\lbrack3, 4\bigr\rbrack)=\mathrm{Flatten}(\bigl\lbrack\bigl\lbrack1, 2\bigr\rbrack, \bigl\lbrack3, 4\bigr\rbrack\bigr\rbrack, 1)OutTrue\mathrm{True}

JoinJoin is associative

live ↗
InJoin(Join([a,b,c],[x,y]),[u,v,w])=Join([a,b,c],Join([x,y],[u,v,w]))\mathrm{Join}(\mathrm{Join}(\bigl\lbrack a, b, c\bigr\rbrack, \bigl\lbrack x, y\bigr\rbrack), \bigl\lbrack u, v, w\bigr\rbrack)=\mathrm{Join}(\bigl\lbrack a, b, c\bigr\rbrack, \mathrm{Join}(\bigl\lbrack x, y\bigr\rbrack, \bigl\lbrack u, v, w\bigr\rbrack))OutTrue\mathrm{True}
Neat examples #

Joining a list to itself doubles it: lengths 1,2,4,8,161, 2, 4, 8, 16

live ↗
InNestList(_1⁡↦Join(_1⁡,_1⁡),[x],4)\mathrm{NestList}(\operatorname{\_1}↦\mathrm{Join}(\operatorname{\_1}, \operatorname{\_1}), \bigl\lbrack x\bigr\rbrack, 4)Out[[x],[x,x],[x,x,x,x],[x,x,x,x,x,x,x,x],[x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x]]\bigl\lbrack\bigl\lbrack x\bigr\rbrack, \bigl\lbrack x, x\bigr\rbrack, \bigl\lbrack x, x, x, x\bigr\rbrack, \bigl\lbrack x, x, x, x, x, x, x, x\bigr\rbrack, \bigl\lbrack x, x, x, x, x, x, x, x, x, x, x, x, x, x, x, x\bigr\rbrack\bigr\rbrack
live ↗
InNestList(_1⁡↦[_1⁡,1−_1⁡],[1],5)\mathrm{NestList}(\operatorname{\_1}↦\bigl\lbrack\operatorname{\_1}, 1-\operatorname{\_1}\bigr\rbrack, \bigl\lbrack1\bigr\rbrack, 5)Out[[1],[[1],[0]],[[[1],[0]],[[0],[1]]],[[[[1],[0]],[[0],[1]]],[[[0],[1]],[[1],[0]]]],[[[[[1],[0]],[[0],[1]]],[[[0],[1]],[[1],[0]]]],[[[[0],[1]],[[1],[0]]],[[[1],[0]],[[0],[1]]]]],[[[[[[1],[0]],[[0],[1]]],[[[0],[1]],[[1],[0]]]],[[[[0],[1]],[[1],[0]]],[[[1],[0]],[[0],[1]]]]],[[[[[0],[1]],[[1],[0]]],[[[1],[0]],[[0],[1]]]],[[[[1],[0]],[[0],[1]]],[[[0],[1]],[[1],[0]]]]]]]\bigl\lbrack\bigl\lbrack1\bigr\rbrack, \bigl\lbrack\bigl\lbrack1\bigr\rbrack, \bigl\lbrack0\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack1\bigr\rbrack, \bigl\lbrack0\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack0\bigr\rbrack, \bigl\lbrack1\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack1\bigr\rbrack, \bigl\lbrack0\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack0\bigr\rbrack, \bigl\lbrack1\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack0\bigr\rbrack, \bigl\lbrack1\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack1\bigr\rbrack, \bigl\lbrack0\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack1\bigr\rbrack, \bigl\lbrack0\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack0\bigr\rbrack, \bigl\lbrack1\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack0\bigr\rbrack, \bigl\lbrack1\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack1\bigr\rbrack, \bigl\lbrack0\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack0\bigr\rbrack, \bigl\lbrack1\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack1\bigr\rbrack, \bigl\lbrack0\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack1\bigr\rbrack, \bigl\lbrack0\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack0\bigr\rbrack, \bigl\lbrack1\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack1\bigr\rbrack, \bigl\lbrack0\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack0\bigr\rbrack, \bigl\lbrack1\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack0\bigr\rbrack, \bigl\lbrack1\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack1\bigr\rbrack, \bigl\lbrack0\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack0\bigr\rbrack, \bigl\lbrack1\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack1\bigr\rbrack, \bigl\lbrack0\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack1\bigr\rbrack, \bigl\lbrack0\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack0\bigr\rbrack, \bigl\lbrack1\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack0\bigr\rbrack, \bigl\lbrack1\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack1\bigr\rbrack, \bigl\lbrack0\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack1\bigr\rbrack, \bigl\lbrack0\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack0\bigr\rbrack, \bigl\lbrack1\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack\bigl\lbrack1\bigr\rbrack, \bigl\lbrack0\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack0\bigr\rbrack, \bigl\lbrack1\bigr\rbrack\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack\bigl\lbrack0\bigr\rbrack, \bigl\lbrack1\bigr\rbrack\bigr\rbrack, \bigl\lbrack\bigl\lbrack1\bigr\rbrack, \bigl\lbrack0\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack\bigr\rbrack
About
Examples20
Checked againstWolfram Language 20 agreemathlib4 5 agree2 error
CrosswalkWolfram Language

Implementation

mappedmathlib4packages/oracle/src/mappings.ts

Two lists of one element type concatenated; a trailing level integer, or a non-list operand, fails to elaborate.

mappedmathlib4packages/oracle/src/mappings.ts

Three lists of one element type concatenated; a trailing level integer, or a non-list operand, fails to elaborate.

See also: Flatten, Append