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

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

Overview

Olá, entusiastas de programação! No post de hoje, você vai aprender uma dica valiosa para qualquer desenvolvedor C#: como verificar se um elemento específico existe em uma lista. Vou te mostrar, de maneira descomplicada, mas detalhada, os passos utilizando métodos bem práticos como o IndexOf e Linq. Além disso, vamos dar uma olhada em como aplicar a mesma lógica em vetores, e qual seria a melhor abordagem em termos de performance. Preparado para tornar seus códigos ainda mais eficientes? Vamos lá!

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!