• 给数组扩容的几种方式


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

        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,其次考虑把一个扩容的、临时的数组赋值给原数组。

  • 相关阅读:
    TensorFlow使用细节 NO1
    tensorflow的keras实现搭配dataset 之二
    tensorflow的keras实现搭配dataset 之一
    windows程序设计 Unicode和多字节之间转换
    windows程序设计 Unicode和多字节
    windows程序设计 显示一个窗口
    windows程序设计 获取系统文件路径
    windows程序设计 基础
    windows程序设计 加载位图图片
    windows程序设计 创建一个新的窗口
  • 原文地址:https://www.cnblogs.com/darrenji/p/3978150.html
Copyright © 2020-2023  润新知