> For the complete documentation index, see [llms.txt](https://gabriel-schade-cardoso.gitbook.io/tango-br/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://gabriel-schade-cardoso.gitbook.io/tango-br/modulos/collection/comparewith.md).

# CompareWith

Compara duas coleções utilizando uma função para compará-las.

Esta função retorna o primeiro resultado diferente de zero da comparação entre os elementos. A função retorna o resultado de `comparer` sobre os dois elementos.

> &#x20;**Atenção**&#x20;
>
> Este método causa a avaliação do [`IEnumerable<T>`](https://msdn.microsoft.com/pt-br/library/9eekhta0%28v=vs.110%29.aspx).

| Parâmetros                                                                                    | Retorno |
| --------------------------------------------------------------------------------------------- | ------- |
| <p>Func\<T, T, int > comparer</p><p>IEnumerable\<T> source1</p><p>IEnumerable\<T> source2</p> | int     |

## Como usar

A função `comparer` deve receber um elemento de cada coleção e retornar um valor inteiro em relação à comparação dos dois elementos.

Esta função foi inspirada na função [`compareWith` disponível no módulo List do F#](http://bit.ly/fsharpcomparewith).

&#x20;**Comparando duas coleções**&#x20;

```csharp
//IEnumerable<int> source = { 1, 2, 4 }
//IEnumerable<int> source2 = { 1, 2, 3 }

int result = source.CompareWith(source2,
      (element1, element2) => element1 > element2 ? 1
                            : element1 < element2 ? -1
                            : 0 );

// result = 1
```

&#x20;**Comparando duas coleções obtendo a diferença**

```csharp
//IEnumerable<int> source = { 1, 42, 3 }
//IEnumerable<int> source2 = { 1, 2, 3 }

int result = source.CompareWith(source2,
      (element1, element2) => element1 - element2);

// result = 42
```

Note que no exemplo anterior, o resultado é `42` por conta da primeira subtração retornar `0`.
