> 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/foldback.md).

# FoldBack

Aplica a função `folder` em cada elemento da coleção, acumulando o resultado enquanto a percorre, neste caso, a coleção é percorrida do último índice para o primeiro.

Este método considera o valor em `state` como valor inicial e o resultado acumulado ao longo da coleção é retornado como resultado do método.

Este método é semelhante ao [`ReduceBack`](https://github.com/gabrielschade/tango-br/tree/973dafe9d6a8dbad594ebb5c6d71c46ff5727a5a/Modules/Collection/reduceback.html), mas neste caso é considerado um `state` inicial.

| Parâmetros                                                                             | Retorno |
| -------------------------------------------------------------------------------------- | ------- |
| <p>Func\<T, TState, TState> folder</p><p>IEnumerable\<T> source</p><p>TState state</p> | TState  |

## Como usar

&#x20;**Acumulando uma quantidade em cada elemento através de uma coleção**&#x20;

```csharp
//IEnumerable<Animal> source = 
//    { ("Cats",4), ("Dogs",5), ("Mice",3), ("Elephants",2) }

int result = source.FoldBack( (_state, element) => _state + element.Item2, 6);

//result = 20
```

Para operações comuns entre valores `int`, `decimal`, `double`, `string` e `bool` você pode utilizar as [operações](https://github.com/gabrielschade/tango-br/tree/973dafe9d6a8dbad594ebb5c6d71c46ff5727a5a/Operations/Introduction.html) como `folder`.

&#x20;**Utilizando uma operação como folder**&#x20;

```csharp
//IEnumerable<int> source = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
int result = source.FoldBack(IntegerOperations.Add, 15);

//result = 15 + 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1
//result = 70
```
