C# 11 - List Patterns Matching
Hoje veremos o novo recurso do C# 11 : List Patterns Matching ou Correspondência de padrões de lista. |
A partir do C# 11,
arrays ou listas podem ser combinados com a sequência de elementos. Assim agora
existe a
possibilidade de utilizarmos a funcionalidade chamada de
List Patterns para simplificar a manipulação de arrays e Lists.
Então, vamos considerar o exemplo dado a seguir:
- Temos um array
com alguns números (série de Fibonacci);
- Temos uma declaração condicional onde a instrução if está usando
uma palavra-chave 'is' e está tentando combinar o
array da série de Fibonacci com outra lista que é uma lista de números separados
por vírgula, especificados entre dois colchetes.
A comparação vai retornar true somente se cada
elemento estiver presente em ambas as listas exatamente no mesmo índice. Abaixo
o exemplo de código :
As correspondências de padrões de lista
De acordo com a documentação, existem três maneiras diferentes de
correspondência de padrões de lista :
1.
Discard pattern ou
Padrão Descartar
O pattern discard (_) pode ser utilizado para referenciar um único elemento de um array ou List;
2. Range pattern ou Padrão de intervalo
O pattern range (..) permite refenciar zero ou mais elementos;
3. Var pattern ou Padrão de var
O pattern var pode ser usado para um novo array ou List, em um processo de “fatiamento” (slice) de uma referência baseada nessas estruturas.
Vamos tentar entender como esses padrões funcionam...
1- Padrão Discard
Esse padrão é útil
para combinar um ou mais elementos de uma sequência, desde que saibamos o
comprimento da sequência.
Então, digamos que queremos descobrir se um número, 1, está presente na primeira
posição em uma sequência de 5 elementos.
Nesse caso, a sequência a ser usada na condição if deve ser [ 1 , _, _, _ , _ ], conforme mostrado no trecho de código abaixo:
Conforme mostrado no código acima, você pode especificar um ou mais elementos
para correspondência de padrões de lista. A única restrição é que você precisa
saber o comprimento da sequência com a qual está comparando. Caso contrário, a
comparação sempre retornará false.
2- Padrão Range
Se o comprimento da sequência a ser comparada não for conhecido, o padrão de
intervalo pode ser útil. Dois pontos(..) podem ser
usados para especificar que qualquer número de elementos pode estar presente no
lugar desses dois pontos (..). Observe que dois
pontos podem ser usados apenas uma vez na sequência.
O trecho de código abaixo mostra alguns exemplos deste padrão:
O padrão que usamos é um padrão constante, o que significa que usamos diretamente os números na sequência. Também temos a opção de usar o padrão relacional – o que significa que podemos especificar as expressões de comparação conforme mostrado no trecho de código abaixo :
3- O padrão var
Nesse padrão,
podemos especificar a palavra-chave var seguida do
nome da variável. Isso significa que o padrão vai capturar o elemento presente
naquela posição. Essa variável pode ser usada no mesmo escopo para qualquer
finalidade que você precisar.
No trecho de código abaixo, há dois casos:
O recurso da
correspondência de padrões de lista pode ser útil para comparar os dados de
arquivos CSV ou arquivos de coluna de comprimento fixo. Se os dados não
estiverem presentes em todas as colunas, a correspondência de padrões de lista
será útil conforme a documentação.
E estamos conversados...
"Dando graças ao
Pai que nos fez idôneos para participar da herança dos santos na luz;
O qual nos tirou da potestade das trevas, e nos transportou para o reino do
Filho do seu amor;"
Colossenses 1:12,13
Referências:
NET - Unit of Work - Padrão Unidade de ...