云中客

梦想有多大,就能走多远

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

                Array.Resize 泛型方法-----将数组的大小更改为指定的新大小。

  今天没事翻翻书,无意中看见了这个方法,我还以为数组的大小是不可改变的,定义多大就多大。今天才发现可以改变大小。

  MSDN上面的解释是: 

此方法分配一个具有指定大小的新数组,将元素从旧数组复制到新数组,然后用新数组替换旧数组。

如果 array 为空引用(在 Visual Basic 中为 Nothing),此方法将新建具有指定大小的数组。

如果 newSize 大于旧数组的 Length,则分配一个新数组,并将所有元素从旧数组复制到新数组。如果 newSize 小于旧数组的 Length,则分配一个新数组,并将元素从旧数组复制到新数组直到新数组被填满为止;旧数组中的剩余元素将被忽略。如果 newSize 与旧数组的 Length 相等,则此方法不执行任何操作。

此方法为 O(n) 操作,其中 nnewSize

 没事写了个测试程序:

 这个方法最好少用,它会开辟新的内存并有一个复制的过程。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestResize
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] strs = {
                "one","two","three","four"
            };
            Console.WriteLine("The old array index and value:");
            PrintIndexAndValues(strs);

            Array.Resize(ref strs, 5);
            Console.WriteLine("Resize to 5,The new array index and value:");
            PrintIndexAndValues(strs);

            Array.Resize(ref strs, 1);
            Console.WriteLine("Resize to 1,The new array index and value:");
            PrintIndexAndValues(strs);

            string[] str=null;
            Array.Resize(ref str, 1);
            Console.WriteLine("Resize to 1,The new array index and value:");
            PrintIndexAndValues(str);

            Console.ReadLine();
        }

        public static void PrintIndexAndValues(string[] myArr)
        {
            for (int i = 0; i < myArr.Length; i++)
            {
                Console.WriteLine("   [{0}] : {1}", i, myArr[i]);
            }
            Console.WriteLine();
        }
    }
}

 

 

 

posted on 2012-03-04 13:31  走遍江湖  阅读(2041)  评论(0编辑  收藏  举报