跳至主要内容

matchkeys 函数

matchkeys 通过获取一个列表中与另一个列表中值对应索引的子集元素来构造一个新列表。

代码块
matchkeys(valueslist, keyslist, searchset)

matchkeys 识别 keyslist 中等于 searchset 元素的索引,然后通过获取 valueslist 中相同索引的元素来构造一个新列表。valueslistkeyslist 必须具有相同的长度。

结果中保留 valueslist 中值的顺序。

示例

代码块
> matchkeys(["i-123", "i-abc", "i-def"], ["us-west", "us-east", "us-east"], ["us-east"])
[
"i-abc",
"i-def",
]

如果结果顺序不重要,可以使用带有映射的 for 表达式获得类似的结果。

代码块
> [for i, z in {"i-123"="us-west","i-abc"="us-east","i-def"="us-east"}: i if z == "us-east"]
[
"i-def",
"i-abc",
]

如果感兴趣的键和值是对象列表中对象的属性,则也可以使用带有该列表的 for 表达式获得类似的结果。

代码块
> [for x in [{id="i-123",zone="us-west"},{id="i-abc",zone="us-east"}]: x.id if x.zone == "us-east"]
[
"i-abc",
]

例如,前面的形式可以与由 resource 块(其 count 元属性已设置)生成的资源实例列表一起使用,以通过匹配资源属性之一来过滤实例。

代码块
> [for x in aws_instance.example: x.id if x.availability_zone == "us-east-1a"]
[
"i-abc123",
"i-def456",
]

由于 matchkeys 的签名复杂且在配置中使用时读者无法立即理解,因此尽可能使用 for 表达式以最大程度地提高可读性。