Gibt es einen besseren Weg, um split dieses Strings mit LINQ?
Habe ich einige Längen - \Breitengrad-Koordinaten gebündelt in einer Zeichenfolge, die ich möchte, aufgeteilt in die Länge\Breite Paaren. Dank stackoverflow habe ich in der Lage zu kommen mit dem einige linq, wird es aufgeteilt in einen mehrdimensionalen string-array. Gibt es eine Möglichkeit, um split den string direkt in ein Objekt, an dem der Längengrad Breitengrad vs ein string-array, dann das Objekt erstellen?
string segment = "51.54398, -0.27585;51.55175, -0.29631;51.56233, -0.30369;51.57035, -0.30856;51.58157, -0.31672;51.59233, -0.3354"
string[][] array = segment.Split(';').Select(s => s.Split(',')).ToArray();
foreach (string[] pair in array)
{
//create object here
}
- Es ist (fast?) nie ein guter Weg, um split einen string unter Verwendung von linq. Das heißt, System.Text.RegularExpressions ist, was Sie wollen
- Was ist das
-0.3354", "London:484"
am Ende der Zeichenfolge? - Mit einem regulären Ausdruck für eine so triviale Aufgabe ist übertrieben. Wenn Sie wissen, dass das format Ihrer Eingabe ist konstant und es ist leicht zu analysieren, durch die Spaltung, Sie sollten mit split anstelle einer regex.
- Sorry, einige zusätzliche Daten.
- Nicht ein großer fan von RegualrExpressions, aber ich Schätze, die Antwort.
- Hinzugefügt eine Antwort mit demo. Finden Sie es live auf IdeOne.com
- Sie wissen, was Sie sagen, über reguläre Ausdrücke... jetzt hast du zwei Probleme.
- Meinungen sind unterschiedlich. Ich verstehe nicht die Notwendigkeit, verbringen zwei Kommentare, die im Grunde wiederholen Sie Ihre anzeigen. Natürlich, das Parsen mit regex tut Eingaben zu prüfen darüber hinaus, was Spaltung bedeutet. Lassen Sie die OP entscheiden. Edit Beachten Sie auch, wie meine Antwort scheint zu sein, die einzige, die sich sorgen über die Zahl Parsen, nicht vorausgesetzt, US-Kultur, z.B.
- Es ist nicht eine Meinung, sondern eine Tatsache. Wenn Sie wissen, dass Sie zwei Telefonnummern auf eine bekannte position in einem string, dann sind Sie unnötig Dinge komplizieren mit einem regulären Ausdruck. Ich verstehe nicht, Ihre Kultur-argument
double.Parse
zu berücksichtigen, dass just fine. - Ok, dann, übersetzt, in Ihrem jargon: "Tatsachen variieren". Was auch immer 🙂
double.Parse
könnte möglich sein über die Dinge, aber niemand Tat - Dieser reguläre Ausdruck wird der string in Paare
(?<pair>(?<lat>[\d\.-]*), (?<lng>[\d\.-]*))
. Ich weiß es nicht .NET regelmäßige Ausdrücke gut genug, um die Gruppen, obwohl. 🙂 - Tatsachen ändern sich nicht wirklich, und danke für den Beweis meiner Sicht für mich Jan. Lokalisierung kann es nicht sein, eine Voraussetzung für dieses Projekt. Nicht jedes Stück software ausführen muss, um auf einem nicht US-Englisch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie in der Nähe. So etwas könnte helfen:
Vorausgesetzt, Sie haben eine
Coordinate
Klasse mit einempublic Coordinate(double x, double y)
Konstruktor, können Sie dies tun:oder gleich
Könnte man dies tun:
Dann können Sie eine Sammlung von GeoCoordinate Klassen folgendermassen:
Ist hier ein 'etwas' nettes snippet zeigen:
Sie möchten, zu extrahieren, die bestimmten code (z.B. die Anzahl parsing) im wirklichen Leben.
Sehen es live auf Ideone.com.
Ausgabe:
Ist es eine Notwendigkeit, die Sie mit LINQ? Sie können es mit den standard string-splitting-Funktionalität:
Könnte ich fügen Sie ein wenig mehr. Dank der dtb für den start, von Ihnen positiv bewertet werden. Wenn Sie Ihre Pause-parsing-Funktion aus, Sie können mehr sauber verarbeiten Fehlerzustände, wie falsche Anzahl der Elemente in deinem array, oder Dinge, die sich nicht analysieren, um eine dezimale.
Einige Aufgaben sind einfacher zu lösen, der alte Weg: