zoukankan      html  css  js  c++  java
  • 给数组扩容的几种方式

    假设有一个规定长度的数组,如何扩容呢?最容易想到的是通过如下方式扩容:

        class Program
    
        {
    
            static void Main(string[] args)
    
            {
    
                int[] arrs = new[] {1, 2, 3, 4, 5};
    
                arrs[5] = 6;
    
            }
    
        }

    报错:未处理IndexOutOfRanageException,索引超出了数组界限。

     

    □ 创建一个扩容的临时数组,然后赋值给原数组,使用循环遍历方式

            static void Main(string[] args)
    
            {
    
                int[] arrs = new[] {1, 2, 3, 4, 5};
    
                int[] temp = new int[arrs.Length + 1];
    
                //遍历arrs数组,把该数组的元素全部赋值给temp数组
    
                for (int i = 0; i < arrs.Length; i++)
    
                {
    
                    temp[i] = arrs[i];
    
                }
    
                //把临时数组赋值给原数组,这时原数组已经扩容
    
                arrs = temp;
    
                //给扩容后原数组的最后一个位置赋值
    
                arrs[arrs.Length - 1] = 6;
    
                foreach (var item in arrs)
    
                {
    
                    Console.WriteLine(item);
    
                }
    
                Console.ReadKey();
    
            }
    

     

    □ 创建一个扩容的临时数组,然后赋值给原数组,使用Array的静态方法

    像这种平常的数组间的拷贝,Array类肯定为我们准备了静态方法:Array.Copy()。

            static void Main(string[] args)
    
            {
    
                int[] arrs = new[] {1, 2, 3, 4, 5};
    
                int[] temp = new int[arrs.Length + 1];
    
                Array.Copy(arrs, temp, arrs.Length);
    
                //把临时数组赋值给原数组,这时原数组已经扩容
    
                arrs = temp;
    
                //给扩容后原数组的最后一个位置赋值
    
                arrs[arrs.Length - 1] = 6;
    
                foreach (var item in arrs)
    
                {
    
                    Console.WriteLine(item);
    
                }
    
                Console.ReadKey();
    
            }
    
      

    □ 使用Array的静态方法扩容

    但是,拷贝来拷贝去显得比较繁琐,我们也可以使用Array.Resize()方法给数组扩容。

            static void Main(string[] args)
    
            {
    
                int[] arrs = new[] {1, 2, 3, 4, 5};
    
                Array.Resize(ref arrs, arrs.Length + 1);
    
                //给扩容后原数组的最后一个位置赋值
    
                arrs[arrs.Length - 1] = 6;
    
                foreach (var item in arrs)
    
                {
    
                    Console.WriteLine(item);
    
                }
    
                Console.ReadKey();
    
            }
    

     

    总结:数组扩容优先考虑使用Array的静态方法Resize,其次考虑把一个扩容的、临时的数组赋值给原数组。

  • 相关阅读:
    【有感】向香港雷锋学什么
    After NeuSoft’s Interview
    【SHELL学习】if语句
    《我是一只IT小小鸟》【1】
    MSDN微软社区 大连线下聚会 即将举行
    【毕业设计】修改用户信息
    SQL Connection
    EasyPR中文开源车牌识别系统 开发详解(1)
    EasyPR开发详解(2)车牌定位
    EasyPR开发详解(4)形态学操作、尺寸验证、旋转等操作
  • 原文地址:https://www.cnblogs.com/darrenji/p/3978150.html
Copyright © 2011-2022 走看看