2010-01-25 7 views
20

Ich habe eine Frage darüber, wie man eine gemeinsame Programmieraufgabe in linq.Match Elemente zwischen 2 Sammlungen mit Linq in C#

sagen wir haben wir verschiedene Sammlungen oder Arrays. Was ich tun möchte, ist Elemente zwischen Arrays zu vergleichen, und wenn es eine Übereinstimmung gibt, dann machen Sie etwas mit diesem Element.

zB:

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

Das ist offensichtlich erreicht werden kann, den obigen Code verwenden, aber was ich frage mich, ob es eine schnelle und saubere Art und Weise ist, dass Sie dies mit LinqtoObjects tun können?

Danke!

+0

Das Wold ist abhängig von Implementierung // etwas tun AUFREGENDE /// Es kann auch gar nicht möglich sein, weil Ling stark IEnumerable-basiert ist, während dieser Code, was zu tun. Linq erstellt eine Datenstruktur für Sie. Was macht // etwas, das aufregt ///? –

+0

Und nebenbei können Sie O (n^2) bis auf O (n) reduzieren, indem Sie zwei Instanzen einer festgelegten Datenstruktur verwenden. –

Antwort

27

Ja, Schnittpunkt - Codebeispiel zur Veranschaulichung.

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 ist am saubersten, aber warum haben Sie den Namen 'Union' verwendet? –

+5

Weil ich das Saints - Vikings Spiel beobachtete und etwas abgelenkt war. Guter Punkt - ich werde es bearbeiten – Ragepotato

+1

was ist, wenn die Sammlungen verschiedene Klassen waren, wo classa.string mit classb.string übereinstimmen musste – Grant

12

Wenn Sie beliebigen Code auf Übereinstimmungen ausführen möchten, wäre dies eine LINQ-y-Methode.

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

Machen Sie mit! Machen Sie mit! –

Verwandte Themen