Sometimes, if you have large arrays, it is better to not use foreach and array get to loop through an array, as it creates a list copy of your array with a quite hefty memory cost. (Another alternative is the 'foreach n [array names foo] { .... }' or 'foreach n [lsort -dictionary [array names foo]]]')
Better do it like this, using while and the array search facilities. (Those are a direct mapping of the C level functionality for a Tcl_HashTable ).
set searchToken [array startsearch largeArray] while {[array anymore largeArray $searchToken]} { set key [array nextelement largeArray $searchToken] set value $largeArray($key) # do something with key/value } array donesearch largeArray $searchToken
Question: how big does an array need to be to make this the better approach?