在 zsh 中,我想迭代关联数组。我需要键和值。但是当我正常迭代关联数组时 ( for x in $assoc_array
),我仅获得值。
我看过的所有例子都表明,给定一个密钥,您可以从关联数组中获取其值。我的问题是首先获取一组键。
zsh 是否支持迭代关联数组中的键?
答案1
你可以通过这个漂亮的参数扩展同时获取键和值:
for key val in "${(@kv)assoc_array}"; do
echo "$key -> $val"
done
看参数扩展标志在 Zsh 手册中。
答案2
我问完问题后继续搜索,发现这个答案在 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
输出为:
k1 -> v1
k2 -> v2
k3 -> v3
答案3
除了以下可接受的答案外,
for key val in "${(@kv)assoc_array}"; do echo "$key -> $val" done
如果你还想按键按升序对结果进行排序,你可以这样做
for key in "${(@kon)assoc_array}"; do echo "$key -> ${(@v)assoc_array[$key]}" done
我通常使用后一种形式,因为它允许在循环中进行更多操作,如排序、过滤等。