21

В zsh я хочу перебрать ассоциативный массив. Мне нужны и ключи, и значения. Но когда я перебираю ассоциативный массив обычно (for x in $assoc_array), я получаю только значения.

Все примеры, которые я посмотрел, показывают, что, имея ключ, вы можете получить его значение из ассоциативного массива. Моя проблема заключается в получении набора ключей для начала.

Поддерживает ли zsh перебор ключей в ассоциативном массиве?

2 ответа2

27

Я продолжил поиск, задав свой вопрос, и нашел этот ответ в Unix StackExchange:

typeset -A assoc_array
assoc_array=(k1 v1 k2 v2 k3 v3)

for k in "${(@k)assoc_array}"; do
  echo "$k -> $assoc_array[$k]"
done

Выход:

k1 -> v1
k2 -> v2
k3 -> v3
7

Вы можете получить как ключи, так и значения одновременно с этим изящным расширением параметра:

for key val in ${(kv)assoc_array}; do
    echo "$key -> $val"
done

См. Флаги расширения параметров в руководстве по Zsh.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .