# Unique

This is used to filter out duplicated items in an array. Note that the original order of the array is maintained.

## Unique array of scalars (string/numbers)

Note that unique maintains the original order of the array.

Given a sample.yml file of:

```yaml
- 2
- 1
- 3
- 2
```

then

```bash
yq 'unique' sample.yml
```

will output

```yaml
- 2
- 1
- 3
```

## Unique nulls

Unique works on the node value, so it considers different representations of nulls to be different

Given a sample.yml file of:

```yaml
- ~
- null
- ~
- null
```

then

```bash
yq 'unique' sample.yml
```

will output

```yaml
- ~
- null
```

## Unique all nulls

Run against the node tag to unique all the nulls

Given a sample.yml file of:

```yaml
- ~
- null
- ~
- null
```

then

```bash
yq 'unique_by(tag)' sample.yml
```

will output

```yaml
- ~
```

## Unique array objects

Given a sample.yml file of:

```yaml
- name: harry
  pet: cat
- name: billy
  pet: dog
- name: harry
  pet: cat
```

then

```bash
yq 'unique' sample.yml
```

will output

```yaml
- name: harry
  pet: cat
- name: billy
  pet: dog
```

## Unique array of objects by a field

Given a sample.yml file of:

```yaml
- name: harry
  pet: cat
- name: billy
  pet: dog
- name: harry
  pet: dog
```

then

```bash
yq 'unique_by(.name)' sample.yml
```

will output

```yaml
- name: harry
  pet: cat
- name: billy
  pet: dog
```

## Unique array of arrays

Given a sample.yml file of:

```yaml
- - cat
  - dog
- - cat
  - sheep
- - cat
  - dog
```

then

```bash
yq 'unique' sample.yml
```

will output

```yaml
- - cat
  - dog
- - cat
  - sheep
```
