Iterowanie nad kluczami (lub parami k / v) w tablicy asocjacyjnej zsh?


21

W zsh chcę iterować po tablicy asocjacyjnej. Potrzebuję zarówno kluczy, jak i wartości. Ale kiedy normalnie wykonuję iterację tablicy asocjacyjnej ( for x in $assoc_array ), Dostaję tylko wartości.

Wszystkie przykłady, które obejrzałem pokazują, że podany klucz , możesz uzyskać jego wartość z tablicy asocjacyjnej. Moim problemem jest uzyskanie zestawu kluczy na początek.

Czy zsh obsługuje iterację nad kluczami w tablicy asocjacyjnej?


Jeśli masz tylko małą listę, może to być opcja: for i in a,b c_s,d ; do KEY=${i%,*}; VAL=${i#*,}; echo $KEY" XX "$VAL; done
math

Odpowiedzi:



27

Kontynuowałem poszukiwania po zadaniu pytania i znalazłem ta odpowiedź na 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

Wyjście to:

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

1
Dla każdego, kto chce przetestować to w użyteczny sposób, spróbuj użyć wbudowanego $options. (Widzieć man zshoptions )
mVChr

Co jeśli klucz nie jest rosnącą liczbą, taką jak foo, bar, etc jak arr [foo] = baz?
Timo
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.