我正在从XML文件中解析一组坐标。每个节点都有如下坐标:
-82.5,34.1,0.000 -82.6,34.2,0.000
在下面的代码中,coords_raw变量已经分配了上述值,我试图拆分成数组lnglatset
- 看起来没问题。
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
}
从上面可以看出,所需的最终值是:
coords = "-82.5 34.1, -82.6 34.2";//note the space between lng/lat
但是如何从数组的每个元素中删除0.000的垃圾值并放置一个空格,而不是每个元素中lng和lat值之间的逗号?我在lnglat
上尝试了一些remove()函数,但foreach
循环中不允许这样做。谢谢!
答案 0 :(得分:3)
您可以使用Take
方法获取除最后一个部分之外的所有部分:
var parts = raw_coords.Split(' ')
.Select(x => x.Split(','))
.Select(x => string.Join(" ", x.Take(x.Length - 1)));
var result = string.Join(",", parts);
答案 1 :(得分:1)
单行:
String result = String.Join(" ", raw_coords.Split(' ', ',')
.Select(i => double.Parse(i))
.Where(i => i != 0).Select( i => i.ToString()));
它删除每个0.000元素并删除空格和逗号。
答案 2 :(得分:0)
在ForEach期间,您无法更改IEnumerable的成员。相反,您可以在拆分原始坐标输入时跳过最后一个成员。
raw_coords.split(' ').Take(2).ToArray()
答案 3 :(得分:0)
与其他提到的一样,您无法使用foreach修改迭代变量。我以艰难的方式学习了它,并最终使用简单的" for"循环而不是foreach:
for(int index=0; i<lnglatset.length-2; i++)
{
}
答案 4 :(得分:0)
您可以使用System.Linq中的IEnumerable.Last()扩展方法。
string lastItemOfSplit = aString.Split(new char[] {@"\"[0], "/"[0]}).Last();