# Index (function)

This article describes a dyadic primitive function that performs indexing into an array. For the concept of array indices, see Index. For the concept of extracting items from an array, see Indexing.
 `⌷`

Index (`⌷`), also called Squad Indexing after the name of the glyph, is a dyadic primitive function. The result of `X⌷Y` is an array formed with items of Y extracted by the index specification X. Index is a proper function alternative to a mode of bracket indexing (which uses a dedicated syntax `Y[X]`), making it usable within tacit programming. It shares its glyph with the monadic Materialise function.

## Examples

The left argument X must be a vector whose length equals the rank of the right argument Y and depth does not exceed 2. Each element of X selects one or more indices over the corresponding axis of the right argument Y. The result is identical to that of bracket indexing in that `Y[X1;X2;…;Xn] ≡ X1 X2 … Xn⌷Y`. The resulting shape equals the concatenation of the shapes of each element of X.

```      VEC←111 222 333 444
3⌷VEC
333
(⊂4 3)⌷VEC
444 333
(⊂2 3⍴3 1 4 1 2 3)⌷VEC
333 111 444
111 222 333

⎕←MAT←10⊥¨⍳3 4
11 12 13 14
21 22 23 24
31 32 33 34
3(2 1)⌷MAT
32 31
⍴(2 1⍴1)(3 4⍴2)⌷MAT
2 1 3 4
```

When used with function axis in the form of `X⌷[K]Y`, K specifies a subset of axes of Y to apply indexing on. The axes not mentioned in K are selected without modification; this corresponds to omitted axes in bracket indexing.

```     ⎕←CUBE←10⊥¨⍳2 3 4
111 112 113 114
121 122 123 124
131 132 133 134

211 212 213 214
221 222 223 224
231 232 233 234

2⌷[1]CUBE
211 212 213 214
221 222 223 224
231 232 233 234

2⌷[3]CUBE
112 122 132
212 222 232

CUBE[;;2] ≡ 2⌷[3]CUBE
1
```

In some dialects that support leading axis theory, short X in `X⌷Y` selects from leading axes of Y. In that case, the trailing axes are selected without modification.

```      MAT←10⊥¨⍳3 4  ⍝ Same as the first example
2⌷MAT  ⍝ Second axis omitted
21 22 23 24
```
Works in: Dyalog APL

## Implementation support

This form of indexing is supported in J as boxed left argument of From `{`.