Tuesday, August 1, 2017
String Arrays in Vala
String Arrays in Vala
String Arrays are simply bunches of strings grouped together
string[] apples = {"red delicious", "granny smith", "macintosh", "gala", "fuji"}
They look like Python lists, but they are not. They often dont work like lists (you cannot slice them), but they work *really* fast. They are useful if you have a data set that is (mostly) immutable...you can append to it, but I havent found a way to delete strings from the array without copying everything else into a new array.
Here is a demo program showing how to
- Create a string array
- Append a string to an array
- Match a string in an array
- Determine the index of the matched string
- Retrieve a string from the array (non-destructively)
- Replace a string with another withing an array
- Concatenate the array into a single string (for printing)
// string_array.vala
// If a in b
void if_a_in_b ( string a, string[] b, string b_name ) {
if (a in b) {
stdout.printf("Found %s in %s ", a, b_name);
}
else {
stdout.printf("%s not Found in %s ", a, b_name);
}
return;
}
// One way to print an array
void print1 (string[] a, string a_name) {
stdout.printf("Array %s: ", a_name);
foreach (string item in a) {
stdout.printf("%s, ", item);
}
stdout.printf(" ");
return;
}
// Another way to print an array
void print2 (string[] a, string a_name) {
string a_string = string.joinv(", ", a);
stdout.printf("Array %s : %s ", a_name, a_string);
return;
}
// Index of an item in an array
void index_array (string[] a, string a_name, string match) {
// Record the index of all matches
int[] indexes = {};
int i;
for (i = 0; i < a.length; i++) {
if (a[i] == match) {
indexes += i;
}
}
// Print the results
if (indexes.length == 0) {
stdout.printf("Indexing %s: %s not found ", a_name, match);
}
else if (indexes.length == 1) {
stdout.printf("Indexing %s: %s found at position %d ",
a_name, match, indexes[0]);
}
else if (indexes.length == 2) {
stdout.printf("Indexing %s: %s found at positions %d and %d ",
a_name, match, indexes[0], indexes[1]);
}
else {
stdout.printf("Indexing %s: %s found at positions ",
a_name, match);
// Convert ints to a strings
int j;
for (j = 0; j < indexes.length; j++) {
if ( j < (indexes.length - 1)) {
stdout.printf("%d, ", indexes[j]);
}
else {
stdout.printf("and %d. ", indexes[j]);
}
}
}
return;
}
void arrays () {
// Create two string arrays
string[] orange = { "fred", "joe", "allen", "steve" };
string[] blue = { "jane", "sam", "ellie", "terri" };
// Test contents of each array
if_a_in_b ("fred", orange, "Orange");
if_a_in_b ("fred", blue, "Blue");
// Length of an array
stdout.printf("List length: %i ", orange.length);
// Item from an array
stdout.printf("Orange item #2: %s ", orange[1]);
// Replace one string in an array
blue[2] = "pamela";
// Determine the index (location) of a string in an array
index_array(blue, "blue", "pamela");
// Append one string to an array
blue += "stacy";
// Print an array
print1(orange, "orange");
print2(blue, "blue");
return;
}
// Main
public static void main() {
arrays ();
stdout.printf("Hello, World ");
return;
}
Compile with a simple
valac string_array.vala
download file now