matchkeys 함수

matchkeys 함수

matchkeys는 한 리스트에서 다른 리스트의 값 인덱스와 일치하는 인덱스의 요소들을 가져와 새 리스트를 구성하는 함수예요. valueslistkeyslist는 반드시 같은 길이여야 하며, 결과에서 valueslist의 값 순서는 그대로 유지돼요. 다만 사용할 때는 가독성을 위해 가급적 for 표현식을 선호하는 편이 좋아요.

출처: 문서

본문

matchkeys는 한 리스트에서 keyslist의 값 인덱스가 다른 리스트의 값 인덱스와 일치하는 요소들의 부분 집합을 가져와 새 리스트를 구성해요.

matchkeys(valueslist, keyslist, searchset)

matchkeyskeyslist에서 searchset의 요소와 같은 인덱스를 찾아내고, valueslist에서 같은 인덱스에 해당하는 요소들을 가져와 새 리스트를 구성해요. valueslistkeyslist는 반드시 같은 길이여야 해요. 결과에서 valueslist 값의 순서는 그대로 유지돼요.

예시 (Examples)

> 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 블록이 만들어내는 리소스 인스턴스 리스트와 함께 사용해서, 리소스 속성 중 하나를 매칭해 인스턴스를 필터링할 수 있어요.

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

matchkeys의 시그니처는 다소 복잡해서 구성에서 사용할 때 독자가 바로 이해하기 어려울 수 있어요. 가능하면 가독성을 위해 for 표현식을 사용하는 것을 권장해요.

더 알아보기 (Learn more)