c#数组的操作

数组是绝大部分变成语言都支持的一种数据类型,无论是C,C++,C#,或是java。数组是具有相同数据类型的一组数据的集合。例如水果的集合–苹果,橘子,香蕉等等。在程序设计中将这些集合称为数组。数组中的每一个变量成为数组的元素,数组能够容纳元素的数量称为的数组的长度。数组中的每一个元素都有唯一的索引与之对应,索引值从0开始。
数组作为对象是使用new关键字进行内存分配,使用数组之前,必须首先定义数组变量所属的类型,一维数组的创建有两种方法:
1.先声明,再用new运算符进行内存分配:数据元素类型[]数组名称;
数组名称=new 数组元素类型[数组元素个数];
2.声明的同时为数组分配内存:数组元素类型[]数组名称=new 数组元素类型[数组元素个数];
在c#中,数组是由System.Arrat类派生而来的引用对象,因此可以使用Array类中的各种方法数组进行操作,下面分别介绍一下如何对数组进行元素的添加和删除。
1.在数组中添加一个元素:此类添加最为容易,即声明一个长度比原数组+1的新数组(使用Length属性获取数组长度),从而循环遍历新数组,根据索引添加新值,代码如下,通过自定义一个arrayadd方法来实现:

 /// <summary>
        /// 增加单个数组元素
        /// </summary>
        /// <param name="arrayborn">原数组</param>
        /// <param name="index">添加索引</param>
        /// <param name="value">添加值</param>
        /// <returns></returns>
  static int[] arrayadd(int[] arrayborn, int index, int value)
        {
            if (index >= (arrayborn.Length))//判断添加的索引值是否大于数组的长度
                index = arrayborn.Length - 1;//设置为最大索引
            int[]arraytem=new int[arrayborn.Length+1];
            for (int i = 0; i < arraytem.Length; i++)
            {
                if (index >= 0)//判断索引值
                {
                    if (i < (index + 1))//判断遍历索引小于添加索引值
                        arraytem[i] = arrayborn[i];//交换元素
                    else if (i == (index + 1))
                        arraytem[i] = value;//添加新值
                    else
                        arraytem[i] = arrayborn[i - 1];
                }
                else
                {
                    if (i == 0)
                        arraytem[i] = value;
                    else
                        arraytem[i] = arrayborn[i - 1];
                }
            }
            return arraytem;
        }

通过对索引值的遍历,可以将原数组中的元素添加至新数组,在添加的索引值处将新元素添加实现对数组添加单个元素的操作;
2.如何在数组中添加一个数组?方法与添加单个元素的方法类似,即先声明一个长度为两个数组长度之和的新数组,还是通过索引的方式遍历添加,方法代码如下:

/// <summary>
        /// 增加单个数组元素
        /// </summary>
        /// <param name="arrayborn">原数组</param>
        /// <param name="index">添加索引</param>
        /// <param name="add">添加数组</param>
        /// <returns></returns>
static int[] arrayadd(int[] arrayborn, int[]add,int index)
        {
            if (index >= (arrayborn.Length))//判断添加的索引值是否大于数组的长度
                index = arrayborn.Length - 1;//设置为最大索引
            int[]arraytem=new int[arrayborn.Length+add.Length];
            for (int i = 0; i < arraytem.Length; i++)
            {
                if (index >= 0)//判断索引值
                {
                    if (i < (index + 1))//判断遍历索引小于添加索引值
                        arraytem[i] = arrayborn[i];//交换元素
                    else if (i == (index + 1))
                    {
                       for(int j=0;j<add.Length;j++)
                           arraytem[i+j]=add[j];
                        i=i+add.Length-1;
                       }
                    else
                        arraytem[i] = arrayborn[i - add.Length];
                }
                else
                {
                    if (i == 0)
                    {
                        for (int j = 0; j < add.Length; j++)
                            arraytem[i + j] = add[j];
                        i = i + add.Length - 1;
                    }
                    else
                        arraytem[i] = arrayborn[i - add.Length];
                }
            }
            return arraytem;
        }

删除数组元素
删除数组元素分为两种情况1.不改变原数组长度;2.数组长度减去删除元素个数,下面分贝通过两个实例来介绍:
1.不改变数组长度:即用删除元素后面的元素来覆盖删除的元素,空出的索引处的值用空格替代,代码如下:

 /// <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)//判断删除长度是否小于等于0
                return;//返回
            if (Index == 0 && Len >= ArrayBorn.Length)//判断删除长度是否超出了数组范围
                Len = ArrayBorn.Length;//将删除长度设置为数组的长度
            else if ((Index + Len) >= ArrayBorn.Length)//判断删除索引和长度的和是否超出了数组范围
                Len = ArrayBorn.Length - Index - 1;//设置删除的长度
            int i = 0;//定义一个int变量,用来标识开始遍历的位置
            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;//设置数组为空
        }

2.改变数组长度,即删除元素后,根据删除的长度使删除后数组长度减去相应的值,代码如下:

/// <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)//判断删除长度是否小于等于0
                return ArrayBorn;//返回源数组
            if (Index == 0 && Len >= ArrayBorn.Length)//判断删除长度是否超出了数组范围
                Len = ArrayBorn.Length;//将删除长度设置为数组的长度
            else if ((Index + Len) >= ArrayBorn.Length)//判断删除索引和长度的和是否超出了数组范围
                Len = ArrayBorn.Length - Index - 1;//设置删除的长度
            string[] temArray = new string[ArrayBorn.Length - Len];//声明一个新的数组
            for (int i = 0; i < temArray.Length; i++)//遍历新数组
            {
                if (i >= Index)//判断遍历索引是否大于等于删除索引
                    temArray[i] = ArrayBorn[i + Len];//为遍历到的索引元素赋值
                else
                    temArray[i] = ArrayBorn[i];//为遍历到的索引元素赋值
            }
            return temArray;//返回得到的新数组
        }

猜你喜欢

转载自blog.csdn.net/weixin_42672765/article/details/83006120