Peter Haworth wrote:

> I may be misunderstanding but does that imply it's still possible to
> create "old style" arrays in Livecode?  As a relative newcomer to LC,
> I've only ever known about the current form of arrays and wouldn't
> know how to set about creating one of the original arrays.

An array is just a collection of key-value pairs, and with associative arrays each key is a string.

All that's changed in recent years is that -- in addition to any text or binary data as we've always had -- you can now use an array as the value for an element, effectively nesting them.

But for keys at any level, a string is a string, whether it's:

   get tArray["Bob"]

...or:

   get tArray["1"]

...or:

   get tArray[1]

...or:

   get tArray["1,2"]

...or:

   put 1 into tFirstPart
   put 2 into tSecondPart
   get tArray[ tFirstPart, tSecondPart]

If you need to work on an array that's stored as the value in another array, you'll want to use:

   put tArray[1] into tAnotherArray
   get tAnotherArray[2]

...or shorter, you can access the second-level array without extracting it first by using a second set of brackets:

   get tArray[1][2]

But with many uses, such as matrix multiplication, you'll probably never need to be able to treat the second dimension as an extractable subset, more interested in the collection as a whole.

So when working on one collection you can use:

  get tArray[1,2]

We could illustrate each like this:

  One-dimensional
  tArray keys:
     1,1
     1,2
     1,3
     2,1
     2,2
     2,3


  Two-dimensional
  tArray keys:
     1
       tArray[1] keys:
         1
         2
         3
     2
       tArray[2] keys:
         1
         2
         3


Multidimensional arrays are very useful when the second (and any subsequent dimensions) may be needed to be worked on as collections in themselves.

But when only working on one collection as a whole, it probably doesn't matter much whether you organize your collection as a one-dimensional array in which parts of the key string provide a sort of row-and-column designation, or make a two-dimensional array.

One advantage of the former is that it allows you to use the existing matrixMultiply. :)

There may also be a modest performance gain from using a single-dimensional array when practical, because each dimension has to run the key through a hash function to determine the memory location of its associated value. That said, the hashes used for most associative aren't nearly as complex as cryptographic hashes, so I doubt the performance difference would matter much.

--
 Richard Gaskin
 Fourth World Systems
 Software Design and Development for the Desktop, Mobile, and the Web
 ____________________________________________________________________
 ambassa...@fourthworld.com                http://www.FourthWorld.com

_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to