C#删除字符串数组的最后一个元素?

时间:2015-02-13 19:39:18

标签: c# arrays element

我正在从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循环中不允许这样做。谢谢!

5 个答案:

答案 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();