为了账号安全,请及时绑定邮箱和手机立即绑定

如何从数组中删除一个元素并将其余元素移回?(C#)

如何从数组中删除一个元素并将其余元素移回?(C#)

C#
繁花如伊 2022-07-23 09:44:27
这是一个数组的例子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 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

过滤以创建新数组

N = N.Where(x => x != 0).ToArray();


查看完整回答
反对 回复 2022-07-23
?
森林海

TA贡献2011条经验 获得超2个赞

它似乎很适合通用扩展方法,并且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

完整的演示在这里


其他资源

复制(数组,Int32,数组,Int32,Int32)

从指定源索引开始的 Array 中复制一系列元素,并将它们粘贴到从指定目标索引开始的另一个 Array。长度和索引指定为 32 位整数。


查看完整回答
反对 回复 2022-07-23
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

你可以使用这个:


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。


查看完整回答
反对 回复 2022-07-23
  • 3 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信