¿Iterando sobre claves (o pares k / v) en una matriz asociativa zsh?


23

En zsh, quiero iterar sobre una matriz asociativa. Necesito claves y valores. Pero cuando itero sobre la matriz asociativa normalmente ( for x in $assoc_array), obtengo solo valores.

Todos los ejemplos que he visto muestran que, dada una clave , puede obtener su valor de una matriz asociativa. Mi problema es obtener el conjunto de claves para empezar.

¿Soporta zsh iterar sobre claves en una matriz asociativa?


Si solo tiene una pequeña lista, esta podría ser una opción:for i in a,b c_s,d ; do KEY=${i%,*}; VAL=${i#*,}; echo $KEY" XX "$VAL; done
matemáticas

Respuestas:



30

Continué buscando después de hacer mi pregunta y encontré esta respuesta en el 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

Salida es:

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

1
Para cualquiera que quiera probar esto de una manera útil, intente con el incorporado $options. (Ver man zshoptions)
mVChr

¿Qué pasa si la clave no es un número creciente como foo, bar, etc. como arr [foo] = baz?
Timo
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.