Arrays and structs

Lists and key-value data, and the loops that walk over them.

On this page

An array is an ordered list. A struct is a set of named values, like an object or a dictionary. Between them they cover most of the data you will handle.

Arrays

Array positions start at 1, not 0. This surprises people coming from JavaScript or Rust, so it is worth a run.

colors = [ "red", "green", "blue" ];

println( colors[ 1 ] );
println( colors.len() );

colors.append( "violet" );
println( colors.toList( ", " ) );

colors[ 2 ] = "lime";
println( colors.toList( ", " ) );
println( colors[ 1 ] & " to " & colors[ colors.len() ] );

Output:

red
3
red, green, blue, violet
red, lime, blue, violet
red to violet

toList turns an array into a delimited string, which is handy for printing. append, prepend, pop and shift add and remove items.

Sorting changes the array in place:

scores = [ 30, 4, 100, 12 ];
arraySort( scores, "numeric" );
println( scores.toList( "," ) );

Output:

4,12,30,100

Structs

person = { name: "Ada", city: "London" };

println( person.name );
println( person[ "city" ] );

person.age = 36;
println( structCount( person ) );
println( person.keyExists( "age" ) );
println( person.keyExists( "email" ) );

structDelete( person, "city" );
println( structCount( person ) );

Output:

Ada
London
3
true
false
2

Reach a value with a dot or with brackets. Brackets let you use a key that is stored in a variable. Assigning to a new key adds it.

Nesting

Arrays and structs nest freely, which is how most real data looks.

person = { name: "Ada", langs: [ "BoxLang", "Rust" ] };
println( person.langs[ 2 ] );

people = [
    { name: "Ada", age: 36 },
    { name: "Linus", age: 28 }
];

for ( p in people ) {
    println( p.name & " is " & p.age );
}

Output:

Rust
Ada is 36
Linus is 28

Loops

for ( n in [ 10, 20, 30 ] ) {
    println( n );
}

for ( i = 1; i <= 3; i++ ) {
    println( "round " & i );
}

total = 0;
for ( n in 1..4 ) {
    total += n;
}
println( total );

count = 0;
while ( count < 3 ) {
    count += 1;
}
println( count );

for ( key, value in { a: 1, b: 2 } ) {
    println( key & "=" & value );
}

Output:

10
20
30
round 1
round 2
round 3
10
3
a=1
b=2

1..4 is a range. for ( key, value in struct ) walks a struct. Do not rely on the order of struct keys.

Try it

Add a println inside the people loop that only prints people older than 30. You will need an if, which lesson 7 covers in depth, but you can guess the shape.

Edit this page Download Markdown Last updated Oct 27, 2026, 1:45:34 PM Report an issue
Lesson 4 of 10 - Learn MatchBox