2011-03-31 137 views
4

有从数组中删除最后一个单元格的功能?从阵列C#中删除字符串

这是一个字符串数组,如:{"a","b","c",""}

+4

阵列可包含任何对象/类型。所以请给你的问题多一点意义。理想情况下,提供输入数组和所需输出数组的示例。甚至更好:展示你到目前为止已经尝试解决无法解决的问题。在简单的话:[提出问题](http://msmvps.com/blogs/jon_skeet/archive/2010/08/29/writing-the-perfect-question.aspx)。 – 2011-03-31 20:51:14

回答

13

数组的长度是不变的,但你可以不空""字符串创建一个新的数组:

string[] newArray = myArray.Where(str => str != "").ToArray(); 
6

如果它是一个字符串数组,你可以这样做:

string[] results = theArray.Where(s => !string.IsNullOrWhitespace(s)).ToArray(); 

如果你只是去重复的结果,有没有必要转换回一个数组,你可以在最后离开关.ToArray()


编辑:

如果你只是想删除最后一个单元格,而不是空项(由您编辑的版本建议),你可以做到这一点使用Array.Copy比更有效地利用上面的LINQ声明:

string[] results = new string[theArray.Length - 1]; 
    Array.Copy(theArray, results, results.Length); 
0
  1. 创建新阵列等于现有阵列大小-1
  2. aNewArray = aOldArray

Ofcourse,你可以只空的最后一个元素数组中,但是这将导致问题以后。否则,请使用一个很好的灵活列表。

2
var newArraySize = oldArray.Length - 1; 
var newArray = new string[newArraySize]; 
Array.Copy(oldArray, newArray, newArraySize); 
0

如果你一直想摆脱过去的元素,

 int[] a = new[] {1, 2, 3, 4, 5}; 
     int[] b = new int[a.Length - 1]; 
     Array.Copy(a, b, a.Length - 1); 
5

数组是一个固定大小的集合对象。这使得它对于你想要做的事情来说可悲的不足。你可以做的最好的是创建另一个一个少一个元素。这太贵了。

解决真正的问题,这应该是一个List<string>,现在它的简单。

8

呃...只是调整它

Array.Resize(ref theArray, theArray.Length -1); 

从文档

公共静态无效调整大小(参照T []数组,整数新尺寸)