Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

189
Visualizações
Linq une dos listas de cadenas usando contiene

Tengo dos listas de la siguiente manera:

 List<string> l1 = new List<string>( new string[]{ "United States", "Brazil", "India", "Canada" }); List<string> l2 = new List<string>( new string[]{ "Asia:India", " North America:Canada", "EU:Germany" }) ;

¿Cómo enumerar todos los elementos de l2 que contienen la cadena en l1 usando Linq Lambda?

Salida deseada

 "Asia:India" "North America:Canada"
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Para cada elemento de la segunda lista, compruebe si hay algún elemento de la primera lista que forme parte del elemento:

 l2.Where(i => l1.Any(j => i.Contains(j));

Tenga en cuenta que esto puede ser lento para listas grandes.

over 4 years ago · Santiago Trujillo Relatório

0

Si tiene muchos países para buscar, sugiero usar HashSet<string> (tiene mejor Complejidad de tiempo, O(1) vs O(N) ):

 HashSet<string> countries = new HashSet<string>() { "United States", "Brazil", "India", "Canada", };

Para crear countries desde l1 :

 HashSet<string> countries = new HashSet<string>(l1);

Entonces puedes poner un Linq simple:

 var result = l2 .Where(item => countries.Contains(item.Substring(item.IndexOf(':') + 1)));

Sus datos tienen una estructura interna: Area:Country que podemos explotar con la ayuda de Substring e IndexOf

Manifestación:

 var l1 = new List<string>() { "United States", "Brazil", "India", "Canada", "Congo", // <- My special test case }; var l2 = new List<string>() { "Asia:India", "North America:Canada", "EU:Germany", "Africa:Democratic Republic of Congo" }; HashSet<string> countries = new HashSet<string>(l1); var result = l2 .Where(item => countries.Contains(item.Substring(item.IndexOf(':') + 1))); Console.Write(string.Join("; ", result));

Salir:

 Asia:India; North America:Canada

Tenga en cuenta la ausencia de Africa:Democratic Republic of Congo : El Congo y Democratic Republic of Congo son estados diferentes .

Editar: solución Linq Join

 var result = l2.Join( l1, item => item.Substring(item.IndexOf(':') + 1), item => item, (left, right) => left);
over 4 years ago · Santiago Trujillo Relatório

0

var answer = l2.Where(x => l1.Any(l => x.Contains(l)));

si el l1 es una lista grande, puede usar un HashSet en lugar de l1 para mejorar el tiempo.

Forma alternativa de dividir cada elemento de l2 por :

 var answer = l2.Where(x => l1.Contains(x.Split(':')[1]));
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda