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

C# Removing Last Element of a string Array?

我正在解析 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 值之间放置一个 space 而不是逗号?我在 lnglat 上尝试了一些 remove() 函数,但在 foreach 循环中不允许这样做。谢谢!

您可以使用Take方法获取除最后一个部分之外的所有部分:

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

var result = string.Join(",", parts);

您不能在 ForEach 期间更改 IEnumerable 的成员。相反,您可以在拆分原始坐标输入时跳过最后一个成员。

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

在一行中:

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

它删除每个 0.000 元素并删除 space 和逗号。

正如其他人提到的,您不能使用 foreach 修改迭代变量。我通过艰难的方式学会了它并最终使用简单的 "for" 循环而不是 foreach:

for(int index=0; i<lnglatset.length-2; i++)
{
}

您可以使用 System.Linq 的 IEnumerable.Last() 扩展方法。

 string lastItemOfSplit = aString.Split(new char[] {@"\"[0], "/"[0]}).Last();