In hashtable you work with columns and rows. And you can use unique Ids to specify it's position easily in a hashtable.
First you would need the Id: (you aslo can do this with units, items, triggers, timers, special effects, ...)
-
Custom script: GetHandleId (GetEnumDestructable())
Now use can use this Id as key in your hashtable. (you can say "key" is just an other word for "row" here, it's just important that it's unique)
Why to use this?
In some cases it may simplify a lot of things. With hashtables you can make things MUI, just because of each object has got his own HanldeId.
Later you can read out data out of hashtable of a specific object with 'Key Of HanldeId' without an extra index.
_____________________________
In hashtables you are able to store integers of max size 2^32. So you easily can store terrain types in a hashtable, for example.
An integer[array] has the max index of only 8191. Saving terrain types into it would be impossible.
____________________________
In general: Sometimes it may be useful to work with hashtables, just because of these unique Ids. But of course it always depends on what you wanna do with it.
If you can work with a simple integer[array] as index, then do so. Reading out of hashtable is a bit slower than just to read an index.
You can read tutorials about hashtables if you wanna learn it. Here's an example:
http://www.hiveworkshop.com/forums/trigger-gui-editor-tutorials-279/hashtables-mui-133407/