首页 > 解决方案 > 查找与 zsh 关联数组中的值匹配的键?

问题描述

在常规数组中,我可以使用(i)or(I)搜索与给定值匹配的条目的索引(分别从数组的开头或结尾开始匹配):

list=(foo bar baz)
echo $list[(i)bar]
# => 2

这不适用于关联数组,以获取(其中一个)找到值的键:

declare -A hash=([foo]=bar [baz]=zoo)
echo $hash[(i)bar]
# => no output 

除了手动循环之外,还有其他机制可以做到这一点吗?

标签: zshassociative-array

解决方案


(r)标标志与(k)参数标志相结合应该给你你想要的:

declare -A hash=([foo]=bar [baz]=zoo)
echo ${(k)hash[(r)bar]}
# => foo

下标标志上的手册页部分(r)只讨论返回值而忽略了这种用法,因此很难找到。


推荐阅读