目录
删除数组元数主要有两种情况:一是在不改变数组元素总数的情况下删除指定元素(也就是用删除元素后面的元素覆盖要删除的元素);二是删除指定元素后,根据删除元素的个数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 */