TOC < Back Next > Updated: 6-Feb-2009 Edit History

# REBOL 3 Concepts: Blocks: Arrays

Pending Revision

This document was written for R2 and has yet to be revised for R3.

Blocks are used for arrays.

An example of a statically defined two dimensional array is:

```arr: [
[1   2   3  ]
[a   b   c  ]
[\$10 \$20 \$30]
]```

You can obtain the values of an array with the series extraction functions:

```probe first arr
[1 2 3]```
```probe pick arr 3
[\$10.00 \$20.00 \$30.00]```
```probe first first arr
1```

You can also use paths to obtain values from the array:

```probe arr/1
[1 2 3]```
```probe arr/3
[\$10.00 \$20.00 \$30.00]```
```probe arr/3/2
\$20.00```

Paths can also be used to change the values in an array:

```arr/1/2: 20
probe arr/1
[1 20 3]```
```arr/3/2: arr/3/1 + arr/3/3
probe arr/3/2
\$40.00```

## Creating Arrays

The array function creates arrays dynamically. The function takes an argument that is either an integer or a block of integers and returns a block that is the array. By default, the cells of an array are initialized to none!. To initialize array cells to some other value, use the /initial refinement explained in the next section.

When array is supplied with a single integer, a one-dimensional array of that size is returned:

```arr: array 5
probe arr
[none none none none none]```

When a block of integers is provided, the array has multiple dimensions. Each integer provides the size of the corresponding dimension.

Here is an example of a two dimensional array that has six cells, two rows of three columns:

```arr: array [2 3]
probe arr
[[none none none] [none none none]]```

This can be made into a three dimensional array by adding another integer to the block:

```arr: array [2 3 2]
foreach lst arr [probe lst]
[[none none] [none none] [none none]]
[[none none] [none none] [none none]]```

The block of integers that is passed to array can be as big as your memory will support.

## Initial Values

To initialize the cells of an array to a value other than none!, use the /initial refinement. This refinement takes one argument: the initial value. Here are some examples:

```arr: array/initial 5 0
probe arr
[0 0 0 0 0]```
```arr: array/initial [2 3] 0
probe arr
[[0 0 0] [0 0 0]]```
```arr: array/initial 3 "a"
probe arr
["a" "a" "a"]```
```arr: array/initial [3 2] 'word
probe arr
[[word word] [word word] [word word]]```
```arr: array/initial [3 2 1] 11:11
probe arr
[[[11:11] [11:11]] [[11:11] [11:11]] [[11:11] [11:11]]]```

 TOC < Back Next > Feedback Admin