メインコンテンツにスキップ

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",
]

たとえば、前の形式を、countメタ属性が設定されたresourceブロックによって生成されたリソースインスタンスのリストで使用して、リソース属性の1つと一致するインスタンスをフィルタリングできます

コードブロック
> [for x in aws_instance.example: x.id if x.availability_zone == "us-east-1a"]
[
"i-abc123",
"i-def456",
]

matchkeys のシグネチャは複雑であり、設定で使用されている場合、読者にとってすぐに明確ではないため、可読性を最大化するために、可能な限りfor式を使用することを推奨します。