X must be a scalar or vector of depth ≤2 of integers each ≥⎕IO. Y may be any array. In general, the result R is similar to that obtained by square-bracket indexing in that:
(I J ... ⌷ Y) ≡ Y[I;J;...]
The length of left argument X must be less than or equal to the rank of right argument Y. Any missing trailing items of X default to the index vector of the corresponding axis of Y.
Note that in common with square-bracket indexing, items of the left argument X may be of any rank and that the shape of the result is the concatenation of the shapes of the items of the left argument:
(⍴X⌷Y) ≡ ↑,/⍴¨X
Index is sometimes referred to as squad indexing.
Note that index may be used with selective specification.
⎕IO is an implicit argument of index.
Examples
⎕IO←1 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 2 1⌷MAT 21 2⌷MAT 21 22 23 24
3(2 1)⌷MAT 32 31 (2 3)1⌷MAT 21 31 (2 3)(,1)⌷MAT 21 31 ⍴(2 1⍴1)(3 4⍴2)⌷MAT 2 1 3 4 ⍴⍬ ⍬⌷MAT 0 0 (3(2 1)⌷MAT)←0 ⋄ MAT ⍝ Selective assignment. 11 12 13 14 21 22 23 24 0 0 33 34
Indexing Classes
If Y is a ref to an instance of a Class with a Default property, ⌷ is applied to the Default property. Similarly, ⌷ applied to a COM or .NET collection returns the appropriate item(s) of the collection.
Example
↑⎕SRC c :Class c :Property Default p :Access Public Shared ∇ r←get r←2 3 4⍴⎕A ∇ :EndProperty :EndClass 2⌷c MNOP QRST UVWX