# Pick

Filter a map by the specified list of keys. Map is returned with the key in the order of the pick list.

Similarly, filter an array by the specified list of indices.

## Pick keys from map

Note that the order of the keys matches the pick order and non existent keys are skipped.

Given a sample.yml file of:

```yaml
myMap:
  cat: meow
  dog: bark
  thing: hamster
  hamster: squeak
```

then

```bash
yq '.myMap |= pick(["hamster", "cat", "goat"])' sample.yml
```

will output

```yaml
myMap:
  hamster: squeak
  cat: meow
```

## Pick keys from map, included all the keys

We create a map of the picked keys plus all the current keys, and run that through unique

Given a sample.yml file of:

```yaml
myMap:
  cat: meow
  dog: bark
  thing: hamster
  hamster: squeak
```

then

```bash
yq '.myMap |= pick( (["thing"] + keys) | unique)' sample.yml
```

will output

```yaml
myMap:
  thing: hamster
  cat: meow
  dog: bark
  hamster: squeak
```

## Pick indices from array

Note that the order of the indices matches the pick order and non existent indices are skipped.

Given a sample.yml file of:

```yaml
- cat
- leopard
- lion
```

then

```bash
yq 'pick([2, 0, 734, -5])' sample.yml
```

will output

```yaml
- lion
- cat
```
