# Arrays

Arrays are especially useful when passing in data to a shader as a uniform and this is currently the only way to create arrays unless you create your own node that outputs an array. [See the how pass in an array of uniforms](https://github.com/adamringhede/three-shader-graph/wiki/Uniforms#uniform-arrays).

### Using arrays

#### Map

An array can be mapped into another array by providing a mapping function.

```ts
const doubledNumbers: ArrayNode<FloatNode> = numbers.map((value: FloatNode) => {
    return value.multiply(float(2))
})
```

#### Sum

An array can be reduced to a single value by providing a function that applies some transformation before summing the values. The return type of the mapping function must be numeric.

```ts
const doubledSum: FloatNode = numbers.sum((value: FloatNode) => {
    return value.multiply(float(2))
})
```

#### Get element by index

```ts
array.get(0) // Using a constant
array.get(int(0)) // Using an IntNode to pick an element programatically
```
