DocumentInQuestion.png It has been suggested that this page's contents be merged with the page Array. You can discuss this on the page's talk page. (June 2019)
See also: Array

A multidimensional array is an array that contains other arrays of the same length, i.e. an array with length 3 contains 3 arrays, each of length 3. Currently, Scratch does not support such arrays; however, they can be replicated with strings. To do so, one compiles one list into a string (separated by a character such as a semicolon), adds that string as an item to a second list, compiles the second list into another string, and adds that string into a third list, then compiles that third list... and so on, for however many dimensions the array contains.

Tutorial

This tutorial assumes two variables:

  • (i)
  • (r)

It also assumes (assuming this is a 3-dimensional list) three lists:

  • (uno::list)
  • (dos::list)
  • (tre::list)

with "uno" actually storing the data.

Retrieving a value

This process decompiles the lists and retrieves one item, using the three indexes provided.

define retrieve item (a) (sep1) (b) (sep2) (c)
delete (all v) of [dos v]
delete (all v) of [tre v]
set [i v] to [0]
repeat (length of (item (a) of [uno v]))
  set [r v] to [ ]
  repeat until <(letter (i) of (item (a) of [uno v])) = (sep1)>
    change [i v] by (1)
    set [r v] to (join (r) (letter (i) of (item (a) of [uno v])))
  end
  add (r) to [dos v]
end
set [i v] to [0]
repeat (length of (item (b) of [dos v]))
  set [r v] to [ ]
  repeat until <(letter (i) of (item (b) of [dos v])) = (sep2)>
    change [i v] by (1)
    set [r v] to (join (r) (letter (i) of (item (b) of [dos v])))
  end
  add (r) to [tre v]
end
set [r v] to (item (c) of [tre v])

The variable (r) is the value retrieved.

Storing a value

This process decompiles the lists, changes one value, then recompiles them.

define store (data) in (a) (sep1) (b) (sep2) (c)
delete (all v) of [dos v]
delete (all v) of [tre v]
set [i v] to [0]
repeat (length of (item (a) of [uno v]))
  set [r v] to [ ]
  repeat until <(letter (i) of (item (a) of [uno v])) = (sep1)>
    change [i v] by (1)
    set [r v] to (join (r) (letter (i) of (item (a) of [uno v])))
  end
  add (r) to [dos v]
end
set [i v] to [0]
repeat (length of (item (b) of [dos v]))
  set [r v] to [ ]
  repeat until <(letter (i) of (item (b) of [dos v])) = (sep2)>
    change [i v] by (1)
    set [r v] to (join (r) (letter (i) of (item (b) of [dos v])))
  end
  add (r) to [tre v]
end
replace item (c) of [tre v] with (data)
set [i v] to [0]
set [r v] to [ ]
repeat (length of [tre v])
  change [i v] by (1)
  set [r v] to (join (join (r) (item (i) of [tre v])) (sep2))
end
replace item (b) of [dos v] with (r)
set [i v] to [0]
set [r v] to [ ]
repeat (length of [dos v])
  change [i v] by (1)
  set [r v] to (join (join (r) (item (i) of [dos v])) (sep1))
end
replace item (a) of [uno v] with (r)