Предсказуемый порядок ответа на имена массивов Tcl?

Я знаю, что имена, возвращаемые [массивом имен X], находятся в неопределенном порядке, но всегда ли они находятся в одном и том же неопределенном порядке?

Я просматриваю очень большой массив и хотел бы регистрировать прогресс в файле в случае сбоя, чтобы я мог снова возобновить работу на полпути.

PS. Быстрый эксперимент показывает, что это всегда один и тот же «случайный» порядок, но это не значит, что это правда!


tcl
person Cormac    schedule 15.06.2009    source источник


Ответы (1)


Короткий ответ заключается в том, что вы не можете полагаться на порядок, и лучше всего [lsort [имена массивов X]] использовать этот порядок.

Длинный ответ заключается в том, что порядок должен быть стабильным, пока ключи одинаковы (и это та же версия Tcl)... но я все равно не стал бы на это полагаться.

Если вы используете Tcl 8.5 или более позднюю версию, возможно, вы захотите использовать Dict вместо массива. Порядок элементов для Dict — это порядок, в котором они были добавлены.

person RHSeeger    schedule 15.06.2009
comment
Хорошая новость заключается в том, что хотя dict не является стандартной частью 8.4, вы можете загрузить его как пакет. См. wiki.tcl.tk/5042. - person Jackson; 17.06.2009
comment
Вы даже можете написать свой собственный процесс для lsort, чтобы вы могли установить порядок, отличный от чисто алфавитного, если это имеет значение. - person Michael Mathews; 25.07.2009
comment
Порядок ключей вообще не гарантируется; это зависит не только от порядка их добавления и внутренних деталей хеш-функции, но также от истории любых добавлений и удалений из массива (особенно если они вызвали перефразировать). Кроме того, вы можете столкнуться с проблемами, если в массиве установлены трассировки, которые изменяют его; массив env особенно плох в этом отношении. Относитесь к порядку как к случайному, и вы не ошибетесь. - person Donal Fellows; 14.09.2010