中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > .NET > 临时文章
重新调整数组长度
作者:未知 时间:2004-11-23 12:12 出处:Blog 责编:chinaitpower
              摘要:暂无
                              重新调整数组长度
在.net中数组长度不是不可以调整的,其实只需用Array的静态方法CreateInstance动态的创建一个数组,然后把数据再
拷贝过来。
 先看看一维数组(以int型为例):
   public class app
    {
                  [STAThread]
   static void Main(string[] args)
   {
                  int[] arr=new int[]{1,2,3};
                  PrintValues( arr );                 
    arr=(int[])Redim(arr,5);
                  PrintValues( arr );
    arr=(int[])Redim(arr,4);
    PrintValues( arr );
                 }
               //调整长度
               public static Array Redim(Array origArray,int length)
               {
                   //确定每个元素的类型
                   Type t=origArray.GetType().GetElementType();
                   //创建新的数组
     Array newArray=Array.CreateInstance(t,length));
                   //原数组中的数据拷贝到新数组中
     Array.Copy(origArray,0,newArray,0,Math.Min(origArray.Length,length)));
     return newArray;
               }
               //输出数据
               public static void PrintValues( Array myArr ) 
  {
   System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
   int i = 0;   
   int cols = myArr.GetLength( myArr.Rank - 1 );
   while ( myEnumerator.MoveNext() ) 
   {
    if ( i < cols ) 
    {
     i++;
    }
    else 
    {
     Console.WriteLine();
     i = 1;
    }
    Console.Write( "\t{0}", myEnumerator.Current );
   }
   Console.WriteLine();
  }
  }
输出结果为:1,2,3
            1,2,3,0,0
            1,2,3,0
以上是一维数组的,如果是二维数组或多维数组呢?
在二维数组后面加一列;
 public class app
    {
                  [STAThread]
   static void Main(string[] args)
   {
                  //创建了一个int型的二维数组
                  int[,] my2DArray=(int[,])Array.CreateInstance( typeof(int), 2, 3 );
   for ( int i = my2DArray.GetLowerBound(0); i <= my2DArray.GetUpperBound(0); i++ )
    for ( int j = my2DArray.GetLowerBound(1); j <= my2DArray.GetUpperBound(1); j++ )     
      my2DArray.SetValue( i + j , i, j );
                   PrintValues( my2DArray) ;
                   Console.WriteLine();
                   my2DArray=(int[,])Redim(my2DArray,2,4);
     PrintValues( my2DArray );
                   my2DArray=(int[,])Redim(my2DArray,2,2);
     PrintValues( my2DArray );
                 }
               //调整长度
               public static Array Redim(Array origArray,params int[] lengths)
               {
                   //确定每个元素的类型
                   Type t=origArray.GetType().GetElementType();
                   //创建新的数组
     Array newArray=Array.CreateInstance(t,lengths)));
                   //原数组中的数据拷贝到新数组中
     for ( int i = origArray.GetLowerBound(0); i <= Math.Min(origArray.GetUpperBound(0),newArray.GetUpperBound(0)); i++ )
    for ( int j = origArray.GetLowerBound(1); j <= Math.Min(origArray.GetUpperBound(1),newArray.GetUpperBound(1)); j++ )     
     newArray.SetValue( origArray.GetValue( i, j ) , i, j );
                   //在这里没有用Copy方法,如果用此方法,会把原数组中所有数据逐个拷贝到新数组中                  
     return newArray;
               }
               //输出数据
               public static void PrintValues( Array myArr ) 
  {
   System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
   int i = 0;   
   int cols = myArr.GetLength( myArr.Rank - 1 );
   while ( myEnumerator.MoveNext() ) 
   {
    if ( i < cols ) 
    {
     i++;
    }
    else 
    {
     Console.WriteLine();
     i = 1;
    }
    Console.Write( "\t{0}", myEnumerator.Current );
   }
   Console.WriteLine();
  }
  }
输出结果为:0,1,2
            1,2,3
            0,1,2,0,0
            1,2,3,0,0
            0,1
            1,2
如果在Redim方法中用Copy方法
稍微改动一下 Redim方法
                 public static Array Redim(Array origArray,params int[] lengths)
  {
                        int length=1;
   for(int i=0;i<lengths.Length;i++)
                        length*=lengths[i];
          Type t=origArray.GetType().GetElementType();
   Array newArray=Array.CreateInstance(t,lengths); 
                        Array.Copy(origArray,0,newArray,0,Math.Min(origArray.Length,length));
                        return newArray;
                }  
输出结果为:0,1,2
            1,2,3
            0,1,2,1
            2,3,0,0
            0,1
            2,1
显然这个结果不是我们要的。
如果是三维,多维呢?参照二维。
           
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有