frankhaugen Skrevet 10. juni 2012 Del Skrevet 10. juni 2012 Jeg sitter her med masse data jeg skal sortere og noe av dette er 3-dimensjonale kartesiske koordinater, (X, Y, Z), fordi jeg er lat og liker enkle løsninger lurer jeg på om jeg kunne legge dette inn i en string, og redigere dette sener slik: programOne { string coords = "-24,2;34,7;-0,345"; double GetY(coords); //equals 34,7 editX(coords, +5); //equals 29,2 } Dette er bare psudokode men bør være forståelig for de fleste. jeg trenger bare en henvinsing til hvordan dette kan gjøres. takk!! -frank Lenke til kommentar
etse Skrevet 10. juni 2012 Del Skrevet 10. juni 2012 (endret) string.split() er det du er ute etter: double doubleFromString(string cords, int num) { return double.Parse(cords.split(";")[num]); } double getX(string cords) { return doubleFromString(cords, 0); } double getY(string cords) { return doubleFromString(cords, 1); } double getZ(string cords) { return doubleFromString(cords, 2); } når det kommer til edit så er det letteste å bare splitte den opp først til doubles, endre verdien og så gjøre det tilbake til string igjen. Men dette vil ikke være veldig effektivt. Endret 10. juni 2012 av etse 1 Lenke til kommentar
frankhaugen Skrevet 10. juni 2012 Forfatter Del Skrevet 10. juni 2012 string.split() er det du er ute etter: double doubleFromString(string cords, int num) { return double.Parse(cords.split(";")[num]); } double getX(string cords) { return doubleFromString(cords, 0); } double getY(string cords) { return doubleFromString(cords, 1); } double getZ(string cords) { return doubleFromString(cords, 2); } når det kommer til edit så er det letteste å bare splitte den opp først til doubles, endre verdien og så gjøre det tilbake til string igjen. Men dette vil ikke være veldig effektivt. Supert!! Var akkurat hva jeg så etter!!! takk!! -frank Lenke til kommentar
GeirGrusom Skrevet 10. juni 2012 Del Skrevet 10. juni 2012 Det er en ganske stor bug i koden over som du kommer til å brenne deg på. Desimalskilletegn er kun komma på Norsk. I nær sagt alle andre kulturer vil den koden feile. Bruk double.Parse(blablabla, CultureInfo.InvariantCulture) og benytt punktum istedet (som er desimalskilletegnet for InvariantCulture) Eventuelt kan du alltid benytte Norsk kultur (istedet for den som er definert for systemet) eller lage din egen CultureInfo. Kan også være en fordel å dytte dette inn i en struktur for å hindre overhead som parsingen vil føre med seg. public struct Coord { public double X; public double Y; public double Z; public static Coord Parse(string input) { var coords = input.Split(";"); return new Coord() { X = double.Parse(coords[0].Trim(), CultureInfo.InvariantCulture), Y = double.Parse(coords[0].Trim(), CultureInfo.InvariantCulture), Z = double.Parse(coords[0].Trim(), CultureInfo.InvariantCulture) } } public override string ToString() { // Skal returnere "X; Y; Z" med InvariantCultureInfo return string.Join("; ", new double[] {X, Y, Z}.Select(v => v.ToString(CultureInfo.InvariantCulture)); } } Lenke til kommentar
angeland89 Skrevet 8. juli 2012 Del Skrevet 8. juli 2012 (endret) ser for med at du kan bruke Vector3 fra XNA Vector3 kordinat = new Vector3(X,Y,Z); float xCord = kordinat.X; float yCord = kordinat.Y; float zCord = kordinat.Z; eller så kan du jo ta i bruk 2dimensjons liste List<int[3]> kordListe = new Liste<int[3]>(); int[3] kordinat= [1,2,3]; kordListe.add(kordinat); Du burde prøve å ikke bruke en streng slik som du ønsked 3d er ikke spessiet vanskeligere en å jobbe med lister eller enkle ints for den saks skyld. det finnes egne variabler for posisjoner. Endret 8. juli 2012 av angeland89 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå