var myData = new Array;
myData['key1'] = 'value1';
myData['key2'] = 'value2';
myData['key3'] = 'value3';
The length property does not return the number of items in the array though. It returns the value of the key with the highest numerical value if parsed as a integer plus one.
>>> Moreover building a hash over an Array object is potentially dangerous. If anyone extends Array.prototype with enumerable properties (as, for example, the Prototype.js library does) these will be read in during for…in iterations, wreaking havoc with your logic (or at least requiring you to make use of the clunky hasOwnProperty method). Build hashes over Object and nothing else, since by convention Object.prototype is not augmented.
* Yeah, Lua is 1-indexed. Nothing's perfect. Lisp has all those parens, Python has the whitespace thing...you get over it. :)
Arrays are numerically indexed, but if a keystring is a base-10 integer, it will get interpreted as an index. If not, the corresponding property of the array object will be returned instead.