如何从数组中删除元素,然后将其余元素移回? (C#)

时间:2019-01-14 23:13:07

标签: c#

这是一个数组的例子

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 

3 个答案:

答案 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

Full Demo Here


其他资源

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。