- OpenTofu 语言
- 函数
- matchkeys
matchkeys
函数
matchkeys
通过获取一个列表中与另一个列表中值对应索引的子集元素来构造一个新列表。
matchkeys(valueslist, keyslist, searchset)
matchkeys
识别 keyslist
中等于 searchset
元素的索引,然后通过获取 valueslist
中相同索引的元素来构造一个新列表。valueslist
和 keyslist
必须具有相同的长度。
结果中保留 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
表达式以最大程度地提高可读性。