Listen vergleichen
-
wie kann ich am schnellsten zwei Listen miteinander vergleichen
und mir dabei die unterschiedlichen Dateien anzeigen lassen?habe das ganze bis jetzt so gelöst:
public void CompareFolder() { foreach (FileSystemInfo files1 in this.folder1) foreach (FileSystemInfo files2 in this.folder2) if (files1.Name.Equals(files2.Name)) if (!CompareFile(files1.FullName, files2.FullName)) { Console.WriteLine(files1.Name); break; } }
Allerdings riecht mir das sehr nach einer Laufzeit von ca n²
freue mich über eure Hilfe
mfg
???
-
Schau dir mal Except und Intersect an, sind Erweiterungsmethoden.
-
Danke!
Leider bekomme ich es aber nicht zum laufen...
public void CompareFolder() { IEnumerable<FileSystemInfo> both = folder1.Intersect(folder2); foreach (FileSystemInfo same in both) Console.WriteLine(same.Name); }
Es wird nur eine Ausgabe gemacht und diese ist nicht mal ein Name
sondern eine Zahl...
-
Liegt vermutlich daran, dass meine erezuge Schnittmenge (bei foreach)
aus den Namen entsteht...
-
Benutze die Überladung der Except-Methode, bei der du auch den IEqualityComparer angeben kannst, d.h. du mußt eine eigene Klasse implementieren
class FileInfoEqualityComparer : IEqualityComparer<FileInfo> { bool Equals(FileInfo f1, FileInfo f2) { return f1.Name == f2.Name; } int GetHashCode(FileInfo fi) { return fi.GetHashCode(); } }
Und nun eine Instanz davon übergeben:
IEnumerable<FileSystemInfo> both = folder1.Except(folder2, new FileInfoEqualityComparer());
(habe ich jetzt aus dem Kopf so hingeschrieben, du müßtest evtl. also noch ein paar kleine Anpassungen vornehmen
-
top sache!!!
Danke für die Hilfe