Moin, ich würde für ein Projekt 2 Tabellen (oder etwas Tabellenartiges, -ähnliches/Daten in tabellarischer Form)
vergleichen und entsprechend ergänzen,d.h. Daten von einer "Tabelle" in eine andere.
Habe ich bislang mit DataTable's und For-Schleifen.
Geht das auch eleganter? Womit macht Ihr das so?
Unidirektional, Quelle: 2 CSV-Dateien
"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein
Hallo echdeneth,
also eine Tabelle ist ja nichts anderes als eine Liste von Objekten mit ihren Eigenschaften.
Ich würde versuchen die Tabellen in Listen von Objekten einzulesen und diese beiden Listen-Objekte kann man dann ganz einfach miteinander vergleichen.
Das wäre so eine Idee von mir.
Gruß,
Raphael
Kommt halt drauf an, was Deine Kriterien für "identisch" ist.
Pauschal gibts da erstmal wenig.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Mit ging es ja erstmal um das Vergleichen an sich. Weniger um die Objekte.
Also womit (IList<>, ObservableCollection, DataTable, etc, Pipapo) man ab besten vergleichen kann,
bzw in welcher dieser Klassen Properties enthalten sind, die dies vereinfachen oder effizienter machen.
"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein
Primär ist dies aber nicht die Aufgabe der jeweiligen Collection als viel mehr die des konkreten Objekts.
Und das ist doch das eigentliche Ziel, Dubletten zu finden.
Dazu musst du eben definieren, wie du doppelte Einträge erkennst und dies ggf. per Equals Implementierung prüfen.
Die Listen oder andere Collection kümmern sich nur um die Datenhaltung, einen anderen Zweck haben diese auch nicht.
Um Vergleiche musst du dich immer selbst kümmern.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Hallo echdeneth,
willst du die Lösung allgemein haben od. ganz konkret für deine Business-Klassen?
Ersteres geht dann via [Artikel] Reflection und Metaprogrammierung (od. auch dann per IL-Generierung zur verbesserten Laufzeit), während letzteres selbst dirket programmiert werden kann.
nicht die Aufgabe der jeweiligen Collection als viel mehr die des konkreten Objekts.
Ich würde das sogar vom konkreten Objekt raushalten und ein eigenes "Comparer-Objekt" dafür verwenden.
(Das kann dann ggf. einfach ausgetauscht werden, während die Business-Klasse davon unberührt bleibt und ein POCO sein kann.)
Mir ist aber noch nicht ganz klar worauf der OT hinaus will.
Also womit (IList<>, ObservableCollection, DataTable, etc, Pipapo) man ab besten vergleichen kann,
Was vergleichen?
Ob in der einen Liste die gleichen Objekte wie in der anderen Liste enthalten sind?
Guck dir mal HashSet<T>
mit dem passenden IEqualityComparer<T>
(selbst zu erstellen, siehe meine Anmerkung zu Beginn), falls die Reihenfolge egal ist.
Sonst schau mal was der Namensraum System.Collections.Generic
so beinhaltet.
Od. geht es darum, dass für die einzelnen Objekte in der List die jeweiligen Eigenschaften verglichen werden sollen?
Es gibt dazu auch eine Menge von (NuGet-) Pakten die behilfreich sein können, aber für Empfehlungen wäre es gut zu wissen was genau gewünscht ist.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Was vergleichen?
Um konkret zu sein, habe ich 2 CSV-Dateien - a und b.
Bei jedem Eintrag in a soll anhand eines Wertes, Übereinstimmungen in b gesucht,
ein weiterer Wert der gleichen Zeile in b ausgelesen und in a eine weitere Zeile mit diesem Wert ergänzt werden.
Das mit den 2 Datatables und For-Schleifen funktioniert, gefällt mich jedoch nicht so richtig...
Habe Skilllevel: Umschüler 2. Klasse
"Man muß die Dinge so einfach wie möglich machen. Aber nicht einfacher." Albert Einstein
Hallo echdeneth,
Um konkret zu sein
dann werde doch bitte wirklich konkret 😉
Zeig mal ein Beispiel (die 2 csvs) und was daraus werden soll. Anhand der Beschreibung kann ich dem nicht folgen, welche Zeile und welcher Wert und so...
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Bei jedem Eintrag in a soll anhand eines Wertes, Übereinstimmungen in b gesucht,
ein weiterer Wert der gleichen Zeile in b ausgelesen und in a eine weitere Zeile mit diesem Wert ergänzt werden.
Vielleicht empfiehlt es sich das Endergebnis in eine dritte csv-Datei zu schreiben. Evtl. hilft der Thread bei SO weiter: https://stackoverflow.com/questions/5154370/compare-two-csv-file-using-in-c-sharp
Oder man verwendet eine 'datenfreundlichere' Sprache, z.B. Python: https://pypi.org/project/csv-diff/
Goalkicker.com // DNC Magazine for .NET Developers // .NET Blogs zum Folgen
Software is like cathedrals: first we build them, then we pray 😉