Itération sur les clés (ou paires k / v) dans le tableau associatif zsh?


23

Dans zsh, je veux parcourir un tableau associatif. J'ai besoin à la fois de clés et de valeurs. Mais lorsque j'itère normalement le tableau associatif ( for x in $assoc_array), je n'obtiens que des valeurs.

Tous les exemples que j'ai examinés montrent que, étant donné une clé , vous pouvez obtenir sa valeur à partir d'un tableau associatif. Mon problème est d'obtenir le jeu de clés pour commencer.

Zsh prend-il en charge l'itération sur les clés d'un tableau associatif?


Si vous n'avez qu'une petite liste, cela pourrait être une option:for i in a,b c_s,d ; do KEY=${i%,*}; VAL=${i#*,}; echo $KEY" XX "$VAL; done
math

Réponses:



30

J'ai continué à chercher après avoir posé ma question et j'ai trouvé cette réponse sur 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

La sortie est:

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

1
Pour toute personne souhaitant tester cela de manière utile, essayez avec la fonction intégrée $options. (Voir man zshoptions)
mVChr

Et si la clé n'est pas un nombre croissant comme foo, bar, etc. comme arr [foo] = baz?
Timo
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.