2010-01-25 26 views
20

Tengo una pregunta sobre cómo hacer una tarea de programación común en linq.Coincidir elementos entre 2 colecciones con Linq en C#

digamos que tenemos diferentes colecciones o matrices. Lo que me gustaría hacer es combinar los elementos entre las matrices y si hay una coincidencia, entonces haga algo con ese elemento.

por ejemplo:

 string[] collection1 = new string[] { "1", "7", "4" }; 
     string[] collection2 = new string[] { "6", "1", "7" }; 

     foreach (string str1 in collection1) 
     { 
      foreach (string str2 in collection2) 
      { 
       if (str1 == str2) 
       { 
        // DO SOMETHING EXCITING/// 
       } 
      } 
     } 

Obviamente, esto puede llevarse a cabo utilizando el código anterior, pero lo que estoy preguntando si hay una manera rápida y ordenada que puede hacer esto con LinqtoObjects?

Gracias!

+0

Eso wold dependen de la implementación de // hacer algo interesante /// Puede incluso no ser posible, porque Ling es fuertemente basada IEnumerable, mientras que este código puede hacer cualquier cosa. Linq construye una estructura de datos para ti. ¿Qué hace // HACER ALGO EXCITANTE /// hacer? –

+0

Y, por cierto, puede reducir O (n^2) hasta O (n) utilizando dos instancias de una estructura de datos establecida. –

Respuesta

27

Sí, intersecar - Ejemplo de código para ilustrar.

string[] collection1 = new string[] { "1", "7", "4" }; 
string[] collection2 = new string[] { "6", "1", "7" }; 

var resultSet = collection1.Intersect<string>(collection2); 

foreach (string s in resultSet) 
{ 
    Console.WriteLine(s); 
} 
+0

Intersecar es el más limpio, pero ¿por qué usaste el nombre 'unión'? –

+5

Porque estaba viendo el juego Saints - Vikings y estaba un poco distraído. Buen punto: lo editaré – Ragepotato

+1

¿qué pasa si las colecciones son diferentes clases donde classa.string necesitaba coincidir con classb.string – Grant

12

Si desea ejecutar código arbitrario en las coincidencias, esta sería una forma LINQ-y de hacerlo.

var query = 
    from str1 in collection1 
    join str2 in collection2 on str1 equals str2 
    select str1; 

foreach (var item in query) 
{ 
    // do something fun 
    Console.WriteLine(item); 
} 
+1

¡Únete es la manera de hacerlo! –

Cuestiones relacionadas