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

  • 相关阅读:
    204. Count Primes (Integer)
    203. Remove Linked List Elements (List)
    202. Happy Number (INT)
    201. Bitwise AND of Numbers Range (Bit)
    200. Number of Islands (Graph)
    199. Binary Tree Right Side View (Tree, Stack)
    198. House Robber(Array; DP)
    191. Number of 1 Bits (Int; Bit)
    190. Reverse Bits (Int; Bit)
    189. Rotate Array(Array)
  • 原文地址:https://www.cnblogs.com/darrenji/p/3978150.html
Copyright © 2011-2022 走看看