- 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",
]
たとえば、前の形式を、count
メタ属性が設定されたresource
ブロックによって生成されたリソースインスタンスのリストで使用して、リソース属性の1つと一致するインスタンスをフィルタリングできます
> [for x in aws_instance.example: x.id if x.availability_zone == "us-east-1a"]
[
"i-abc123",
"i-def456",
]
matchkeys
のシグネチャは複雑であり、設定で使用されている場合、読者にとってすぐに明確ではないため、可読性を最大化するために、可能な限りfor
式を使用することを推奨します。