C#中删除数组中任意位置的元素

目录

1、不改变长度的情况下从数组的指定索引处删除指定长度的元素

2、改变长度的情况下从数组的指定索引处删除指定长度的元素


        删除数组元数主要有两种情况:一是在不改变数组元素总数的情况下删除指定元素(也就是用删除元素后面的元素覆盖要删除的元素);二是删除指定元素后,根据删除元素的个数n,使删除后的数组长度减n。

1、不改变长度的情况下从数组的指定索引处删除指定长度的元素

//删除数组中任意位置开始元素
//不改变数组元素总数的情况下删除指定元素(也就是用删除元素后面的元素覆盖要删除的元素)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DelArrayNo
{
    class Program
    {
        /// <summary>
        /// 删除数组中的元素
        /// </summary>
        /// <param name="ArrayBorn">要从中删除元素的数组</param>
        /// <param name="Index">删除索引</param>
        /// <param name="Len">删除的长度</param>
        static void DeleteArray(string[] ArrayBorn, int Index, int Len)
        {
            if (Len <= 0)                               //如果输入的实参Len<=0
                return;                                 //则退出调用方法(不执行删除操作)
            if (Index == 0 && Len >= ArrayBorn.Length)  //接着,如果输入的删除位置实参Index=0并且长度超过原数组长度
                Len = ArrayBorn.Length;                 //则修改预删除长度为原数组长度
            else if ((Index + Len) >= ArrayBorn.Length) //否则,如果输入的实参(Index + Len)超过原数组长度
                Len = ArrayBorn.Length - Index - 1;     //则修改预删除长度为原数组长度-Index实参-1;
            int i /*= 0*/;                              //定义一个int变量,用来标识开始遍历的位置,IDE0059
            for (i = 0; i < ArrayBorn.Length - Index - Len; i++)                        //遍历删除的长度
                ArrayBorn[i + Index] = ArrayBorn[i + Len + Index];                      //覆盖要删除的值           
            for (int j = (ArrayBorn.Length - 1); j > (ArrayBorn.Length - Len - 1); j--) //遍历新数组
                ArrayBorn[j] = null ?? string.Empty;    //设置数组为空,CS8625
        }
        static void Main(string[] args)
        {
            if (args is null)                           //解除IDE0060
            {
                throw new ArgumentNullException(nameof(args));
            }
            string[] ArrayStr = new string[] { "m", "r", "s", "o", "f", "t" };          //声明一个字符串数组
            Console.WriteLine("源数组:");
            foreach (string i in ArrayStr)  //遍历源数组
                Console.Write(i+" ");       //输出数组中的元素
            Console.WriteLine();
            DeleteArray(ArrayStr, 0, 1);    //删除数组中位置=0开始的元素,1个
            Console.WriteLine("删除元素后的数组:");
            foreach (string i in ArrayStr)  //遍历删除元素后的数组
                Console.Write(i+" ");       //输出数组中的元素
            Console.WriteLine();
            DeleteArray(ArrayStr, 0, 3);    //删除数组中位置=开始的元素,3个
            Console.WriteLine("删除元素后的数组:");            
            foreach (string i in ArrayStr)  //遍历删除元素后的数组
                Console.Write(i + " ");     //输出数组中的元素
            Console.ReadLine();
        }
    }
}
/*运行结果:
源数组:
m r s o f t
删除元素后的数组:
r s o f t
删除元素后的数组:
f t       */

2、改变长度的情况下从数组的指定索引处删除指定长度的元素

//删除指定元素后,根据删除元素的个数n,使删除后的数组长度减n。
//自定义方法ret_DeleteArray在删除元素或指定区域的元素后,改变数组的长度

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DelArrayYes
{
    class Program
    {
        /// <summary>
        /// 删除数组中的元素,并改变数组的长度
        /// </summary>
        /// <param name="ArrayBorn">要从中删除元素的数组</param>
        /// <param name="Index">删除索引</param>
        /// <param name="Len">删除的长度</param>
        /// <returns>得到的新数组</returns>
        static string[] DeleteArray(string[] ArrayBorn, int Index, int Len)
        {
            if (Len <= 0)                                   //如果输入的实参Len<=0
                return ArrayBorn;                           //则退出调用方法(不执行删除操作)
            if (Index == 0 && Len >= ArrayBorn.Length)      //接着,如果输入的删除位置实参Index=0并且长度超过原数组长度
                Len = ArrayBorn.Length;                     //则修改预删除长度为原数组长度
            else if ((Index + Len) >= ArrayBorn.Length)     //否则,如果输入的实参(Index + Len)超过原数组长度
                Len = ArrayBorn.Length - Index - 1;         //则修改预删除长度为原数组长度-Index实参-1;
            string[] temArray = new string[ArrayBorn.Length - Len];//声明一个新的数组,大小=剩余长度
            for (int i = 0; i < temArray.Length; i++)       //遍历新数组
            {
                if (i >= Index)                             //如果循环变量i在输入的实参删除位置Index之后
                    temArray[i] = ArrayBorn[i + Len];       //则新数组元素=原数组(同一索引位置+删除长度)的值
                else
                    temArray[i] = ArrayBorn[i];             //否则,输入的删除位置实参Index之前的新数组元素=原数组同一索引位置的值
            }
            return temArray;                                //返回得到的新数组
        }

        static void Main(string[] args)
        {
            if (args is null)                               //解除IDE0060
            {
                throw new ArgumentNullException(nameof(args));
            }
            string[] ArrayStr = new string[] { "m", "r", "s", "o", "f", "t" };//声明一个字符串数组
            Console.WriteLine("源数组:");
            foreach (string i in ArrayStr)                  //遍历源数组
                Console.Write(i + " ");                     //输出数组中的元素
            Console.WriteLine();
            string[] newArray = DeleteArray(ArrayStr, 0, 1);//调用方法并不改变原数组,在0位置删除数组中的元素1个
            Console.WriteLine("删除元素后的数组:");
            foreach (string i in newArray)                  //遍历删除元素后的数组
                Console.Write(i + " ");                     //输出数组中的元素
            Console.WriteLine();
            newArray = DeleteArray(ArrayStr, 0, 3);         //调用方法,在0位置删除数组中的元素3个
            Console.WriteLine("删除元素后的数组:");
            foreach (string i in newArray)                  //遍历删除元素后的数组
                Console.Write(i + " ");                     //输出数组中的元素
            Console.ReadLine();
        }
    }
}
/*运行结果:
源数组:
m r s o f t
删除元素后的数组:
r s o f t
删除元素后的数组:
o f t    */

猜你喜欢

转载自blog.csdn.net/wenchm/article/details/131385985