Estoy analizando un conjunto de coordenadas de un archivo XML. Cada nodo tendrá coordenadas como:

-82.5,34.1,0.000 -82.6,34.2,0.000

En el siguiente código, la variable coords_raw ya tiene asignado el valor anterior y estoy tratando de dividirlo en una matriz lnglatset, que se ve bien.

    string[] lnglatset = raw_coords.Split(' ');//will yield like     [0]=-82.00,34.00,00000 // Will need to get rid of the last set of zeros
    foreach (string lnglat in lnglatset)
    {
       Console.WriteLine(lnglat);//-82.5,34.1,0.000; looks fine
    }  

De lo anterior, el valor final necesario sería:

     coords = "-82.5 34.1, -82.6 34.2";//note the space between lng/lat

Pero, ¿cómo eliminar los valores basura de 0.000 de cada elemento de la matriz y poner un espacio, en lugar de una coma, entre los valores lng y lat en cada elemento? Probé alguna función remove () en lnglat pero eso no estaba permitido dentro del ciclo foreach. ¡Gracias!

0
IrfanClemson 13 feb. 2015 a las 22:39

5 respuestas

La mejor respuesta

Puede tomar todas las partes excepto la última usando el método Take:

var parts =  raw_coords.Split(' ')
             .Select(x => x.Split(','))
             .Select(x => string.Join(" ", x.Take(x.Length - 1)));

var result = string.Join(",", parts);
3
Selman Genç 13 feb. 2015 a las 19:42

Puede usar el método de extensión IEnumerable.Last () de System.Linq.

 string lastItemOfSplit = aString.Split(new char[] {@"\"[0], "/"[0]}).Last();
0
Tejas 16 dic. 2015 a las 06:57

Como otros mencionaron, no puede modificar la variable iterativa con foreach. Lo aprendí de la manera difícil y terminé usando un bucle simple "for" en lugar de foreach:

for(int index=0; i<lnglatset.length-2; i++)
{
}
0
Kabali 13 feb. 2015 a las 20:38

No puede alterar los miembros de IEnumerable durante un ForEach. En su lugar, puede omitir el último miembro al dividir la entrada de coordenadas sin procesar.

raw_coords.split(' ').Take(2).ToArray()

0
tom.dietrich 13 feb. 2015 a las 19:42

En una sola línea:

String result = String.Join(" ",  raw_coords.Split(' ', ',')
.Select(i => double.Parse(i))
.Where(i => i != 0).Select( i => i.ToString()));

Elimina cada elemento 0.000 y elimina el espacio y la coma.

1
rducom 13 feb. 2015 a las 19:44