2010-12-09 4 views
0

ich zwei Listen habenWie eine Liste der Unterschiede auf zwei anderen Listen basiert erstellen und zu schließen Duplikate

List<string> list1 as new List<string>(); 

und

List<string> list2 as new List<string>(); 

Was ich will, eine dritte Liste erstellen zu tun, dass a Liste der Unterschiede.

Beispiel: list1 enthält (Test1, Test2, Test3, Test4) list2 enthält (Test1, Test3)

ich meine neue Liste enthalten (Test 2, Test4)

Ich versuchte möchte mit

newlist = list1.Except(list2).ToList(); 

und für das obige Beispiel funktioniert es gut.

Beispiel 2: Liste 1 enthält (Test1, Test1, Test2, Test2) Liste 2 leer

Ich mag mein newlist alles (Test1, Test1, Test2, Test2)

Wenn enthalten Ich benutze die gleiche außer Methode, die ich oben verwendete Ich bekomme in meiner neuen Liste (Test1, Test2)

Gibt es eine Möglichkeit, die Duplikate enthalten?

Noch ein letztes Beispiel, so dass es hoffentlich klar ist, auf das, was ich suche list1 enthält (Test1, Test2, Test2, Test3, Test4) list2 enthält (Test1, Test2, Test5, Test6)

I möchte, dass meine neue Liste enthält (Test2, Test3, Test4, Test5, Test6)

Noch eine Sache ist, dass list1 und list2 in keiner bestimmten Reihenfolge sind und newlist muss auch nicht in einer bestimmten Reihenfolge sein.

Antwort

1

Ich denke, das zu bekommen, wonach Sie hier suchen, wird mit einem out of the box wirklich schwer zu tun sein. Wirklich, was Sie tun müssen, ist "zusammenfassen" beide Listen etwas wie eine Zählung jedes Artikels, dann von dort, machen Sie einen anderen auf Gegenstände, dann einen Unterschied in Bezug auf zählt.

0

UPDATE:

var list1 = new List<string>() { "Test1", "Test2", "Test2", "Test3", "Test4" }; 
var list2 = new List<string>() { "Test1", "Test2", "Test5", "Test6" }; 

var newlist = new List<string>(); 
list1.ForEach(delegate(string s) { if (!list2.Remove(s)) newlist.Add(s); }); 
newlist = newlist.Concat(list2).ToList(); 
0

Sie werden diese schreiben selbst: Ich habe meine vorherigen Code in etwas ein wenig kleiner komprimiert. Die Art und Weise Exceptwahrscheinlich funktioniert, indem Sie alle Elemente aus der ersten Sammlung in die Entsprechung von HashSet<T> setzen und jedes Element entfernen, das in der Sekunde ist.

Was ich tun würde ist etwas Ähnliches: alles aus der ersten Sammlung in eine Dictionary<T, int> mit Werten entsprechend Vorkommen zählt. Aufzählung über die zweite Sammlung subtrahieren von diesen Zählungen. Dann rekonstruiere eine Liste von den aktualisierten Zählungen nach der Subtraktion.

Macht das Sinn?

Verwandte Themen