Verificando se um elemento exista na lista. (C#/.NET)

Neste post mostro como verificar se um elemento existe em uma lista (List<T>). A forma é simples, mas é exclusiva para as listas. (Apesar de que, tem como fazer a mesma coisa com vetores também, só não é eficaz em termos de performance…)

Para este exemplo, considere a lista abaixo:

var myStrList = new List<string> { "foo", "bar", "bacon", "egg" };

 

Utilizando IndexOf

Agora queremos ver se as strings “bacon” e “salad” existem na lista myStrList…

var indexBacon = myStrList.IndexOf("bacon");
var indexSalad = myStrList.IndexOf("salad");

No código acima, a variável indexBacon vai receber o valor 2 (que é a posição da string bacon na lista) e a variável indexSalad vai receber -1, pois esta string não consta na lista.

 

Sendo assim, podemos utilizar o metodo acima para verificar se um determinado elemento existe ou não na lista…

//Search for bacon
var search = "bacon";

if (myStrList.IndexOf(search) >= 0)
    //Element found in list.
    Console.WriteLine("Exists!");
else
    //Element not found in list.
    Console.WriteLine("Not found!");

Neste código temos o exemplo de como verificar. Se o retorno da função IndexOf for maior que ou igual a zero (pois o C# é base zero), então o item existe. Se retornar -1, não existe.

 

Mas e se você possuir um vetor (array) ao invés de lista?

var myIntArr = new int[] { 13, 23, 33, 42, 53, 63, 73 };
var posOf42 = myIntArr.ToList().IndexOf(42);

Para utilizar esta mesma lógica em um vetor, primeiro você precisará convertê-lo para lista. Todavia, imagino que esta não seja uma opção muito boa em termos de performance, especialmente se você estiver com uma lista muito grande.

 

Utilizando Linq

De forma alternativa, você também pode utilizar o Linq para descobrir se o elemento existe na lista.

var searchBacon = myStrList.Where(item => item == "bacon").FirstOrDefault();
var searchSalad = myStrList.Where(item => item == "salad").FirstOrDefault();

No código acima, a variável searchBacon possui o valor “bacon”, pois este elemento existe na lista e você o selecionou (usando linq). Já a variável searchSalad está definida como null, pois o elemento não existe.

 

Para este caso, como o tipo de resposta é diferente, podemos padronizar utilizando um operador ternário:

var found = (myStrList.Where(item => item == "bar").FirstOrDefault() != null) ? 1 : -1;

Com esta expressão, se o item for encontrado, a variável found vai receber o valor 1. Caso contrário, receberá -1.

 

Espero ter ajudado!

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in .Net, Dev and tagged , , .