2010-01-25 6 views
20

Ho una domanda su come eseguire un'attività di programmazione comune in linq.Elementi di corrispondenza tra 2 raccolte con Linq in C#

diciamo che abbiamo creato collezioni o array diversi. Quello che mi piacerebbe fare è abbinare gli elementi tra gli array e se c'è una corrispondenza quindi fare qualcosa con quell'elemento.

esempio:

 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/// 
       } 
      } 
     } 

Questo può ovviamente essere eseguita utilizzando il codice di cui sopra, ma quello che mi chiedo se c'è un modo veloce e accurato si può fare questo con LinqtoObjects?

Grazie!

+0

che wold dipendono attuazione // fare qualcosa di eccitante /// Esso non può essere ancora possibile, perché Ling è fortemente IEnumerable-based, mentre questo codice può fare qualsiasi cosa. Linq crea una struttura dati per te. Cosa fa // DO SOMETHING EXCITING /// do? –

+0

E a proposito, è possibile ridurre O (n^2) a O (n) utilizzando due istanze di una struttura dati impostata. –

risposta

27

Sì, intersecare - Esempio di codice per illustrare.

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

Intersect è il più pulito, ma perché hai usato il nome "unione"? –

+5

Causa stavo guardando il gioco Saints - Vikings ed ero leggermente distratto. Buon punto - lo modificherò – Ragepotato

+1

e se le collezioni fossero classi diverse dove classa.string aveva bisogno di abbinare classb.string – Grant

12

Se si desidera eseguire codice arbitrario su corrispondenze, questo sarebbe un modo LINQ-y per farlo.

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

Partecipare è il modo per farlo! –

Problemi correlati