Если бы я хотел, чтобы передать ключи и значения ассоциативного массива в Баш отдельно, и использовать что-то вродеBash ассоциативный массив заказа
./foo.py -k "${!args[@]}" -v "${args[@]}"
бы они вышли в том же порядке? Мне все равно, что другие пары k = v хранятся, но мне нужно знать, могу ли я рассчитывать на клавиши и значения, выходящие так, что 3-й элемент в массиве ключей фактически является ключом для 3-й элемент в массиве значений.
Я знаю, что ассоциативные массивы «неупорядочены» и что любой порядок, который вы добавляете в массив, не имеет никакого отношения к тому, как они выводятся, но мне интересно, означает ли поведение базового хранилища, что они всегда будут выводиться в том же заказ.
Не ответ, потому что мне пришлось бы проверять код, чтобы обеспечить его. Однако я был бы очень удивлен, если бы это было не так, хотя бы потому, что потребовалось бы, казалось бы, ненужное усилие для создания разных порядков (до тех пор, пока массив не будет изменен между расширениями). – chepner
@chepner: Вы не можете сделать такой вывод. Я не знаю о bash, но на других языках некоторые сохраняют порядок, а некоторые - нет, в зависимости от реализации. В других это может даже измениться между версиями. Например, Tcl - пока (я думаю), версия 8.5 - не гарантирует, что порядок сохранен, но потом он изменил его. – user1934428
Вы утверждаете, что Tcl выполняет что-то вроде хэш-рандомизации при каждом доступе? Это 'array get name' может возвращать другой список каждый раз, когда он вызывается, если' name' вообще не изменяется между вызовами? – chepner