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

  • 相关阅读:
    CUDA从入门到精通
    [Network] 计算机网络基础知识总结
    第三章 需求工程概论
    jsp学习
    算法——递推算法
    大话设计模式读书笔记--文章汇总
    轻松学SQL Server数据库
    Oracle数据库建表+添加数据练习
    《C#图解教程》 总览
    php发送get、post请求的6种方法简明总结
  • 原文地址:https://www.cnblogs.com/darrenji/p/3978150.html
Copyright © 2011-2022 走看看