--- page_title: matchkeys - Functions - Configuration Language description: |- The matchkeys function takes a subset of elements from one list by matching corresponding indexes in another list. --- # `matchkeys` Function `matchkeys` constructs a new list by taking a subset of elements from one list whose indexes match the corresponding indexes of values in another list. ```hcl matchkeys(valueslist, keyslist, searchset) ``` `matchkeys` identifies the indexes in `keyslist` that are equal to elements of `searchset`, and then constructs a new list by taking those same indexes from `valueslist`. Both `valueslist` and `keyslist` must be the same length. The ordering of the values in `valueslist` is preserved in the result. ## Examples ``` > matchkeys(["i-123", "i-abc", "i-def"], ["us-west", "us-east", "us-east"], ["us-east"]) [ "i-abc", "i-def", ] ``` If the result ordering is not significant, you can achieve a similar result using a `for` expression with a map: ``` > [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", ] ``` If the keys and values of interest are attributes of objects in a list of objects then you can also achieve a similar result using a `for` expression with that list: ``` > [for x in [{id="i-123",zone="us-west"},{id="i-abc",zone="us-east"}]: x.id if x.zone == "us-east"] [ "i-abc", ] ``` For example, the previous form can be used with the list of resource instances produced by a `resource` block with the `count` meta-attribute set, to filter the instances by matching one of the resource attributes: ``` > [for x in aws_instance.example: x.id if x.availability_zone == "us-east-1a"] [ "i-abc123", "i-def456", ] ``` Since the signature of `matchkeys` is complicated and not immediately clear to the reader when used in configuration, prefer to use `for` expressions where possible to maximize readability.