Arrays in Small Basic


With version 0.5, Small Basic implements native support for arrays. This is a significant change from how arrays were used in v0.4 and so I want to write about the syntax and the functionality of the new arrays.


Any variable can be used as an array – no special declaration or setup is necessary. Arrays are indexed using square brackets.


numbers[1] = “One”
numbers[2] = “Two”
TextWindow.WriteLine(numbers[1])
TextWindow.WriteLine(numbers[2])

Arrays can be indexed with either numbers or text. And you can use different types of indexers in the same array.


myarray[“one”] = 1
myarray[2300] = “Two thousand three hundred”
myarray[“name”] = “Vijaye”

Arrays can be copied over via simple assignment. Modifying one array doesn’t affect the other array.


first[1] = “Uno”
first[2] = “Dos”
second = first
TextWindow.WriteLine(second[2]) ‘ prints Dos
second[1] = “One”
TextWindow.WriteLine(second[1]) ‘ prints One
TextWindow.WriteLine(first[1]) ‘ prints Uno

The values in an array are internally maintained as a string with semicolon separated values:


person[“Name”] = “Vijaye”
person[“Age”] = 30
person[“Address”] = “Redmond”
TextWindow.WriteLine(person)

This prints:


Name=Vijaye;Age=30;Address=Redmond;

You can remove elements in an array by setting them to an empty text.


myarray[1] = “One”
myarray[2] = “Two”
myarray[3] = “Three”
TextWindow.WriteLine(Array.GetItemCount(myarray)) ‘ prints 3
myarray[2] = “”
TextWindow.WriteLine(Array.GetItemCount(myarray)) ‘ prints 2

And finally, arrays can be multi-dimensional too


people[1][“Name”][“First”] = “Vijaye”
people[1][“Name”][“Last”] = “Raji”
people[2][“Name”][“First”] = “Carl”
people[2][“Name”][“Last”] = “Fredrickson”
TextWindow.WriteLine(people[2][“Name”])

This prints:


First=Carl;Last=Fredrickson;

Theoretically, you can have as many dimensions as you want. However, the way they are implemented internally, a two dimensional array is 2 times slower than a single dimension array, and a three dimensional array is 4 times slower than a single dimensional array and so on. So, I’d recommend not overdoing multidimensional arrays.


 

Comments (9)

  1. Thank you for submitting this cool story – Trackback from DotNetShoutout

  2. progg.ru says:

    Thank you for submitting this cool story – Trackback from progg.ru

  3. Dear Small Basic Blog,

    Thank you for "Arrays in Small Basic", it’s very helpful considering that documentation and examples are sparce!  

    A document similiar to "Introducing Small Basic" (pdf) on "Data Structures and Algorithms in Small Basic"  would be Perfect!!  Also, how about "Design Patterns in Small Basic?"

    Would Microsoft’s article on data structures in C# help here?  Yes, I think so!

    Thanks again!

    Flight!

  4. Public User says:

    I would like to second Mr. "Flight Computer" from Sunday, July 5, 2009 2:15 AM!  It is a shot in the dark after going through the "introducing small Basic" pdf file as to where to go next for furthr instruction to learn and share.  What next…?

    Overall, great starting program, just want to develop more not stop due to lack of further instruction etc..

    Thanks.

  5. XinhengWu says:

    I have read "introducing small Basic". Is there any other related materials for learning small basic in a whole system?

    Thanks.

  6. ‘DKZ463

    ‘************   Miskei Vendel

    ‘************  www.miskei.hu

    ‘************       2009

    GraphicsWindow.Title="Winter"

    GraphicsWindow.Width=640

    GraphicsWindow.Height=480

    pic = Flickr.GetRandomPicture("Winter")

    GraphicsWindow.DrawResizedImage(pic, 0, 0, 640, 480)

    GraphicsWindow.DrawBoundText(530,460,110,"www.miskei.hu")

    gw =640

    gh =480

    For i=1 To 50

     ho=i/6+1

     GraphicsWindow.BrushColor = "#ffffff"

     GraphicsWindow.PenColor="#ffffff"

     ball[i] = Shapes.AddEllipse(ho, ho)

     x[i] = Math.GetRandomNumber(600)+20

     y[i] = Math.GetRandomNumber(460)+10

    EndFor

    RunLoop:

    For i=1 To 50

    dX[i] = 2*Math.GetRandomNumber(2)-2

    dY[i] = 2*Math.GetRandomNumber(2)

    If i<20 Then

     dy[i]=dy[i]-2

    EndIf

    x[i] = x[i] + dX[i]

    y[i] = y[i] + dY[i]

    If y[i]>=gh Then

     y[i] = -20

     x[i] = Math.GetRandomNumber(600)+20

    EndIf

    Shapes.Move(ball[i], x[i], y[i])

    EndFor

    Goto RunLoop

  7. jkelava6 says:

    Thank you! I know most of that, just File.GetDirectories gave me arrays I thought will be interacted as Array (.SetValue, .GetValue and theese) class, not dimensional variable… which is 100X simplier! Thanks again, iif you want to see result go on http://www.jkelava6projects.wordpress.com, I'll put new game(Mover 2) up soon(probably), and maku sure you catch comething of it! Greetings, jkelava6

  8. hi hi hi says:

    This is beautiful but doesn't help me *dribble*