迭代 zsh 关联数组中的键(或 k/v 对)?

Phi*_*lip 30 zsh

在 zsh 中,我想遍历关联数组。我需要键和值。但是当我正常迭代关联数组 ( for x in $assoc_array) 时,我只得到值。

我看过的所有例子都表明,给定一个 key,你可以从关联数组中获取它的值。我的问题是开始获取一组密钥。

zsh 是否支持迭代关联数组中的键?

Phi*_*lip 37

在提出我的问题后,我继续搜索并在 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
Run Code Online (Sandbox Code Playgroud)

输出是:

k1 -> v1
k2 -> v2
k3 -> v3
Run Code Online (Sandbox Code Playgroud)

  • 对于任何想要以有用的方式进行测试的人,请尝试使用内置的 `$options`。(见`man zshoptions`) (2认同)
  • @Timo 我认为您不应该期望关联数组中的任何特定顺序。 (2认同)

Rad*_*ugh 28

您可以使用这个漂亮的参数扩展同时获取键和值:

for key val in "${(@kv)assoc_array}"; do
    echo "$key -> $val"
done
Run Code Online (Sandbox Code Playgroud)

请参阅Zsh 手册中的参数扩展标志

  • @Gairfowl 已编辑 (2认同)