Iterazione su chiavi (o coppie k / v) nella matrice associativa zsh?


23

In zsh, voglio iterare su un array associativo. Ho bisogno sia di chiavi che di valori. Ma quando eseguo un'iterazione sull'array associativo normalmente ( for x in $assoc_array), ottengo solo valori.

Tutti gli esempi che ho visto mostrano che, data una chiave , puoi ottenere il suo valore da un array associativo. Il mio problema è iniziare il set di chiavi.

Zsh supporta l'iterazione su chiavi in ​​un array associativo?


Se hai solo un piccolo elenco, questa potrebbe essere un'opzione:for i in a,b c_s,d ; do KEY=${i%,*}; VAL=${i#*,}; echo $KEY" XX "$VAL; done
matematica

Risposte:



30

Ho continuato a cercare dopo aver fatto la mia domanda e ho trovato questa risposta su 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

L'output è:

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

1
Per chiunque voglia testarlo in modo utile, prova con il built-in $options. (Vedi man zshoptions)
mVChr

Cosa succede se la chiave non è un numero crescente come foo, bar, ecc. Come arr [foo] = baz?
Timo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.