Iterando sobre chaves (ou pares k / v) na matriz associativa zsh?


23

No zsh, quero iterar sobre uma matriz associativa. Eu preciso de chaves e valores. Mas quando eu itero sobre a matriz associativa normalmente ( for x in $assoc_array), recebo apenas valores.

Todos os exemplos que eu observei mostram que, dada uma chave , você pode obter seu valor de uma matriz associativa. Meu problema é obter o conjunto de chaves para começar.

O zsh suporta a iteração sobre chaves em uma matriz associativa?


Se você tiver apenas uma pequena lista esta pode ser uma opção:for i in a,b c_s,d ; do KEY=${i%,*}; VAL=${i#*,}; echo $KEY" XX "$VAL; done
matemática

Respostas:



30

Continuei pesquisando depois de fazer 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

1
Para quem quiser testar isso de uma maneira útil, tente com o builtin $options. (Veja man zshoptions)
mVChr

E se a chave não for um número crescente, como foo, bar, etc, como arr [foo] = baz?
Timo
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.