Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

192
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!