这是一个数组的例子
int[] N = new int[]{1,0,6,0,3,4};
for (int i = 0; i < N.Length; i++){
if (N[i] == 0){
//remove N[i] and moveback everything }
foreach (string i in N) {
Console.Write("{0} ", i + " ");
}
示例输出为
1 6 3 4
答案 0 :(得分:2)
过滤以创建新数组
N = N.Where(x => x != 0).ToArray();
答案 1 :(得分:1)
似乎很适合通用扩展方法,并且Array.Copy
拥有一个不错的快速解决方案
注意 :这将重新创建一个数组。
给出
public static class Extensions
{
public static T[] RemoveElement<T>(this T[] source, int index)
where T : new()
{
if(index >= source.Length) throw new ArgumentOutOfRangeException(nameof(index));
// create new array
var result = new T[source.Length - 1];
// Copy the first part
Array.Copy(source, 0, result, 0, index);
// Copy the second part
Array.Copy(source, index+1, result, index, source.Length - (index+1));
return result;
}
}
用法
int[] N = new int[]{1,0,6,0,3,4};
var result = N.RemoveElement(1);
示例
public static void Main()
{
int[] N = new int[]{1,0,6,0,3,4};
Console.WriteLine(string.Join(",", N.RemoveElement(1)));
Console.WriteLine(string.Join(",", N.RemoveElement(0)));
Console.WriteLine(string.Join(",", N.RemoveElement(5)));
}
输出
1,6,0,3,4
0,6,0,3,4
1,0,6,0,3
其他资源
Copy(Array, Int32, Array, Int32, Int32)
从指定的数组开始复制数组中的一系列元素 源索引并将它们粘贴到从 指定的目标索引。长度和索引已指定 为32位整数。
答案 2 :(得分:0)
您可以使用此:
int[] N = new int[]{1,0,6,0,3,4};
var foos = new List<int>(N);
int indexToRemove = 1;
foos.RemoveAt(indexToRemove);
N = foos.ToArray();
foreach(int elem in N )
Console.WriteLine(elem);
仅供参考:为了获得高性能/频繁访问,不建议使用linq。