Lists
Lists are mutable sequences of items. They are similar to lists in Python.
Lists are surrounded by brackets, just like python: [1,2,3]
Here is some sample code demonstrating different operations you can do on lists:
//the "as List" is optional: mylist as List = ["foo", "bar", "baz", 0, 1, 2] print mylist for item in mylist: print item print "len(mylist): " + len(mylist) for i in range(mylist.Count): print mylist[i] print mylist.Join("=") //foo=bar=baz=0=1=2 mylist[1] = "bbb" //set 2nd item print mylist print "mylist[1]: " + mylist[1] //print 2nd item print "Index of \"bbb\": " + mylist.IndexOf("bbb") mylist.Add("new item") //also mylist.Push does same thing print mylist mylist.Insert(4,"abc") //insert "abc" at 5th spot print mylist mylist.Remove("bbb") //remove the "bbb" item print mylist mylist.RemoveAt(1) //remove the 2nd item print mylist mylist.Remove(0) //remove the zero item (not 1st item) print mylist mylist += ["test"] print mylist mylist.Extend(["one","two"]) print mylist lastitem = mylist.Pop() //removes last item from list and returns it print mylist if mylist == ["foo","abc",1,2,"new item","test","one"]: print "equals other list" //List comprehensions: print "just the string items: " + [i for i in mylist if i isa string] print "just the int items: " + [i for i in mylist if i isa int] //"i isa string" is the same as "i.GetType() == string" //another way to do it using the "as" cast: (see Casting Types) // (i as string) will be null if item is an integer print "just the string items: " + [stritem for i in mylist if stritem=(i as string)] print "just 3 letter items: " + [stritem for i in mylist if stritem=(i as string) and len(stritem) == 3] if "foo" in mylist: print "foo is in mylist" //another way to do the same thing: if mylist.Contains("foo"): print "contains foo" if "baditem" not in mylist: print "baditem is not in mylist" //You can also pass a special search function or closure to Find. //Find returns the first item that returns true from the search function. if mylist.Find({item | return item == "foo"}): print "found foo" //using a multiline do/def closure with Find: result = [1, 2, 3].Find() do (item as int): return item > 1 print "item > 1 in [1,2,3]: " + result //Collect is similar to Find but it returns a list of all items that //return true from the search function. result = [1, 2, 3].Collect() do (item as int): return item > 1 print "all items > 1 in [1,2,3]: " + result //Sorting a list. Only works if all the items are comparable //(all ints or strings for example) //or if you pass your own compare function. newlist = [2, 4, 3, 5, 1] print newlist print newlist.Sort() result = newlist.Sort() do (left as int, right as int): return right - left //reverse sort order print result mylist = mylist * 3 print mylist mylist.Clear()
Arrays
Arrays are similar to arrays in C, C#, or Java. They are initialized to a certain fixed length, and all the items in an array are of the same type (int, string, etc.).
In boo, arrays use parentheses to surround the items instead of brackets: (1,2,3).
If you need to declare the type of an array, use parentheses surrounding the type of item in the array, such as (int) for an array of ints or (object) for an array of objects.
Boo's arrays and lists are zero-based, so the first item is item 0, the 2nd is item 1, etc.
//Create an array with 3 strings - the 'as (string)' part is optional myarray as (string) = ("one", "two", "three") for i in myarray: print i //Create an array to hold 10 integers: a as (int) = array(int,10) //set the 2nd item to 3 a[1] = 3 print a[1] //Convert from array to list: mylist = [item for item in myarray] print mylist //Convert from list back to array: //This is the preferred way to do it: array2 = array(string, mylist) //but there is this way too: (compiler can't tell the type though) array3 = mylist.ToArray(string) for i in array2: print i // Append two arrays: a = (1, 2) + (3, 4) assert a == (1, 2, 3, 4)
Byte arrays and Char Arrays
Creating byte arrays - arrays of type (byte).
Boo right now doesn't support implicitly converting int literals to type byte, so you need to use the array() builtin function.
#won't work: bytes as (byte) = (1,2,3,4,5) //int to byte bytes = array(byte,(1,2,3,4,5)) print bytes.GetType() //-> System.Byte[] for b in bytes: print b //hex literals to byte bytes = array(byte, (0xFF, 0xBB, 0x3F)) for b in bytes: print b //chars or string to a byte array: bytes = System.Text.ASCIIEncoding().GetBytes("abcABC") for b in bytes: print b
Char arrays - arrays of type (char).
Boo also right now doesn't have support for implicitly converting single character string literals (like "a") to the char type. A workaround it to use slicing ("a"[0]), but in this case you can use the ToCharArray method of the string class instead:
#won't work: charbytes as (char) = ("a", "b", "c") //String.ToCharArray() charbytes = "abcABC".ToCharArray() print charbytes.GetType() //-> System.Char[] for b in charbytes: print b
Creating an empty, zero-length array
Sometimes a system function might require passing an array even if it is empty. Here are some ways to create an empty zero-length array of type (object):
emptyArray = array(object, 0) //other ways: emptyArray = array(object,[]) emptyArray = [].ToArray(object) emptyArray = array([]) //If the type is to be (object), then you can simply use: emptyArray = (,)
Slicing Lists and Arrays
You can also "slice" lists and arrays to get a particular subset of a list or array.
See Slicing.
Multidimensional Arrays
Recently boo added support for Multidimensional Arrays, also called rectangular arrays.


