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?