More About Data Types
The Container Types
Some of the data types in Pike are containers. A data item of one of these container types can contain other data items.
The simplest of the container types is the array. If a variable is a box where you can put a data item, an array is a whole sequence of such boxes. The boxes are numbered, starting with 0, so in an array with 10 places the first one has number 0, and the tenth and last one has number 9. The position numbers are called indices. (One index, many indices.)
You can give an array in your Pike program by listing its elements inside parenthesis-curly-bracket quotes:
({ "geegle", "boogle", "fnordle blordle" })
({ 12, 17, -3, 8 })
({ })
({ 12, 17, 17, "foo", ({ "gleep", "gleep" }) })
As you can see, an array can be empty (containing no elements), and it can also contain other arrays. An array can contain elements of different types, but it is more common with arrays that only contain one type of element.
You can define array variables like this:
array a; // Array of anything
array(string) b; // Array of strings
array(array(string)) c; // Array of arrays of strings
array(mixed) d; // Array of anything
Then you can give values to these variables:
a = ({ 17, "hello", 3.6 });
b = ({ "foo", "bar", "fum" });
c = ({ ({ "John", "Sherlock" }), ({ "Holmes" }) });
d = c;
You can access the elements in an array, either to just get the value or to replace it. This is usually called indexing the array. Indexing is done by writing the position number, or index, within square brackets after the array:
write(a[0]); // Writes 17
b[1] = "bloo"; // Replaces "bar" with "bloo"
c[1][0] = b[2]; // Replaces "Holmes" with "fum"
There are many useful operations that can be done with arrays. For example, you can add two arrays together:
({ 7, 1 }) + ({ 3, 1, 6 })
The result of that expression is a new array, with the elements from the two arrays concatenated:
({ 7, 1, 3, 1, 6 })
Except for arrays there are two other container types in Pike, mapping and multiset. A set is something where a value is either a member or not, and a multiset is a set which can contain several copies of the same value. Mappings are sometimes called dictionaries, and lets you translate from one value (such as “beer”) to another value (“cerveza”). Academics might know the datatype by the name “associative array”, Perl programmers call them “hashes”. Mappings and multisets are explained in a later chapter.