2 dimensional Arrays

Dave dave at looktowindward.com
Thu Mar 15 07:10:07 EDT 2007


On 15 Mar 2007, at 04:53, Mark Wieder wrote:

> Richard-
>
> Wednesday, March 14, 2007, 8:54:34 AM, you wrote:
>
>> So while it's true that Rev's arrays are associative rather than
>> numerically indexed (and a request has been submitted to make that  
>> more
>> self-evident in the docs), it's not like Rev invented some novel  
>> form of
>> array.  As the 800,000 hits at that link show, associative arrays  
>> are a
>> common feature of a great many languages.
>
> Aw, that's nothin' - I got 2,360,000 hits from Google looking up
> Hashtable, which is another way of saying "associative arrray".

Yes, it's really all down to implementation. For instance SNOBOL4/ 
SPITBOL implements Both Arrays and Associative Arrays (called tables)  
as so:

Both "[]" and "<>" can be used to hold the array index or table key.  
By convention "[]" is used for Arrays and "<>" is used for tables.

A Table (Associative Array) is setup as so:

   myTable = table(100,50)

Which creates a table with 100 pre-allocated entries and when this is  
full, will extend the table by 50 entries.

A table is accessed as so:

   myValue = myTable<"key">

  myTable<"key"> = myValue


An Array (Bounded Index Array) is setup as so:

   myArray = array("-100:100,200:900")

Which creates a 2D array with indexes 200 entries in X (addressed as  
-100 to +100) and 700 entries in Y (addresses as +200 to +900).

An Array is accessed as so:

  myValue = myArray[-7,489)

myArray[-7,489) = myValue

If an attempt is made to access an out of bounds item a run-time  
error occurs (an exception is thrown).

There are functions to convert between Arrays and Tables, such as:

myArray = convert(myTable,"array")   Which creates a 2D array from  
myTable

myTable = convert(myArray,"table")   Which creates a Table from the  
first two dimensions of an array.

There are more specialized functions too, such as:

myArrayA = sort(myArrayB,index)  Which sorts an array into another  
array using the dimension specified by index as the sort field.

myArray = sort(myTable,index) Which sorts a table into an array using  
either the key or the data field as the sort field.

This allows both data types to co-exist and work together and believe  
me it's Super-Powerful!

If Index type arrays were implemented in RunRev, I'm not sure how the  
syntax would work, how would the compiler/interpreter know that:

myArray[1,2] didn't mean key "1,2" or vice versa, also how would the  
bounds of the array be checked?

All the Best
Dave















More information about the use-livecode mailing list