Iterando chaves (ou pares k / v) no array associativo zsh?

21

No zsh, quero iterar em um array associativo. Eu preciso de chaves e valores. Mas quando eu faço iterações sobre o array associativo normalmente ( for x in $assoc_array ), eu só obtenho valores.

Todos os exemplos que eu vi mostram que, dada uma chave , você pode obter o seu valor a partir de um array associativo. Meu problema é pegar o conjunto de chaves para começar.

O zsh suporta a iteração de chaves em um array associativo?

    
por Philip 03.04.2014 / 18:17

2 respostas

6

Você pode obter as duas chaves e valores de uma só vez com esta expansão de parâmetro nifty:

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

Veja Sinalizadores de Expansão de Parâmetro no manual do Zsh.

    
por 04.08.2017 / 04:32
27

Eu continuei pesquisando depois de fazer a minha pergunta e encontrei esta resposta no 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

A saída é:

k1 -> v1
k2 -> v2
k3 -> v3
    
por 03.04.2014 / 18:22

Tags