Autor Beitrag
Nordlicht321
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 29.01.15 10:11 
Hallo,

ich habe das folgende Problem. Ich habe in eine List<Koordinaten> die folgenden 6 Variablen aus einer XML-Datei eingelesen: Startkoordinate-X, Startkoordinate-Y, Startkoordinate-Z, Endkoordinate-X, Endkooridnate-Y und Endkoordinate-Z.
Nun möchte ich mit einer Schleife diese List durchlaufen um gleiche Punkte(gleiche Koordinatenwerte) zu finden und auszugeben. Kann mir jemand ein Besipiel geben, wie ich am besten vorgehe?


Vielen Dank für Eure Hilfe.
Blup
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 173
Erhaltene Danke: 43



BeitragVerfasst: Do 29.01.15 10:23 
Die Liste nach den Koordinaten sortieren, gleiche Koordinaten folgen dann aufeinander.
Jetzt muss man die Liste nur einmal durchsehen und prüfen, ob der Vorgänger oder Nachfolger identische Koordinaten hat.
Stundenplan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 128
Erhaltene Danke: 32

Win 7
Delphi 7 Pers., C# (VS 2010 Express)
BeitragVerfasst: Do 29.01.15 10:44 
Ginge das nicht auch mit list.Distinct (Sofern Koordinaten ein struct ist)?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 29.01.15 11:12 
Distinct würde dir die eindeutigen ohne Duplikate liefern. Daraus weißt du dann immer noch nicht welche doppelt sind.
Man müßte schon gruppieren und schauen welches Elemente es mehr als 1mal gibt.

Unter der Annahme das die Koordinaten Klasse (vermutlich ungünstig die Klasse im Plural zu bezeichnen es ist bestimmt nur 1 Koordinate) einfach die 3 Properties X,Y,Z hat etwa
ausblenden C#-Quelltext
1:
var duplicates = meineLiebeListeMitKoordinaten.GroupBy(k => new { k.X, k.Y, k.Z }).SelectMany(x => x.Skip(1));					
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 29.01.15 14:05 
LINQ finde ich zwar auch super, aber für diese Aufgabe reicht doch wirklich ein Exists (bzw. Find oder FindIndex):
ausblenden C#-Quelltext
1:
2:
3:
4:
Koordinaten coord;
if (list.Exists(x => x.StartX == coord.StartX && x.StartY == coord.StartY && ...))
{
}

Oder aber die Equals-Methode überschreiben bzw. falls die Koordinaten sogar als Struktur (struct) definiert sind, reicht sogar Contains.
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Do 29.01.15 14:17 
@Th69: Übersehe ich was oder bräuchtest du so nicht immer noch die Schleife über die Liste um dann per Linq zu prüfen ob das aktuelle Element vorhanden ist (die benannten Linq Methoden liefern dir ja immer max. 1 Treffer und nicht die Liste aller Treffer). Wenn dem so ist müßtest du noch verhindern sich selbst zu finden.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 29.01.15 17:19 
Ich würde natürlich schon beim Einlesen schauen, ob die Werte in der Liste sind (bevor ich sie hinzufüge).