注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

数组、索引器和集合(三)  

2010-12-22 20:22:20|  分类: C# & .NET |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

前面介绍了多维数组的两种类型:规则数组和不规则数组,以及他们的一些常见属性和简单操作,这里讨论一下数组的一些扩展知识。

6.数组的边界

前面介绍的是数组应用比较广泛的方面,这里再说说数组中不常用的方法和属性。

Array类有一个静态方法CreateInstance,该方法返回一个数组,该方法的一个重载方法能够指定多维数组中每一维的下界(默认从0开始,但是通过指定,将不从0开始),和Visual Basicbase方法很类似。为了完成这项任务,需要给该方法传递三个参数,第一个参数是对象的类型(int, double, string…),指定元素的数据类型。第二个参数为代表数组中每一维长度的整型数组,最好一个参数则是代表每一维数组的下界,且长度必须和第二个参数相同,即需要显式指定每一维的下界。

一个示例如下:

using System;

using System.Collections.Generic;

using System.Text;

namespace Castor

{

    class Program

    {

        static void Main(string[] args)

        {

            int[] ArrLength = new int[3] { 3, 5, 4 };

            int[] ArrBound = new int[3] { 3, 2, 4 };

            Array MyArr = Array.CreateInstance(typeof(double), ArrLength, ArrBound);

            //显示每一维的下界和上界

            Console.WriteLine("边界\t下界\t上界");

            for (int i = 0; i < MyArr.Rank; i++)

            {

                Console.WriteLine("{0}\t{1}\t{2}", i, MyArr.GetLowerBound(i), MyArr.GetUpperBound(i));

            }

            Console.ReadLine();

        }

    }

}

运行效果如下:

数组、索引器和集合(三) - Castor - 趁年轻,多折腾~~

代码中的GetLowerBound GetUpperBound返回Array指定纬度的下限和上限。

7.数组的复制

如果两个数组类型一致,是可以进行复制的,如下:

using System;

using System.Collections.Generic;

using System.Text;

namespace Castor

{

    class Program

    {

        static void Main(string[] args)

        {

            int[] Arr1 = new int[3] { 1, 2, 3 };

            int[] Arr2 = new int[4] { 3, 2, 1,5 };

            Console.WriteLine(Arr2.Length.ToString());

            Arr2 = Arr1;

            Console.WriteLine(Arr2.Length.ToString());

            foreach (int i in Arr2)

            {

                Console.Write("{0} ", i);

            }

            Console.ReadLine();

        }

    }

}

运行效果如下:

数组、索引器和集合(三) - Castor - 趁年轻,多折腾~~

 

可见复制之后数组长度变短了,反过来复制的话,arr1将会变长,这个时候数组表现出动态数组的性质了。

8.数组的排序

Array类有两个很强大的静态方法:Sort()Reverse(),实现数组的排序。C#的内置数据类型(包括string)的数组都能很好的支持这两个方法。如果是自定义类,则该类需要实现IComparable接口。下面是这两个方法的演示。

using System;

using System.Collections.Generic;

using System.Text;

namespace Castor

{

    class Program

    {

        static void Main(string[] args)

        {

            string[] arr = new string[] { "Greeting!","C#", "Program", "Language" };

            PrintArray(arr);

            Array.Sort(arr);

            PrintArray(arr);

            Array.Reverse(arr);

            PrintArray(arr);

            Console.ReadLine();

        }

        public static void PrintArray(string[] StrArr)

        {

            foreach (string str in StrArr)

            {

                Console.Write(str + " ");

            }

            Console.WriteLine();

        }

    }

}

运行效果如下:

数组、索引器和集合(三) - Castor - 趁年轻,多折腾~~

 

排序按照字母顺序。Sort方法按照从小到大的方式排序,如果需要从大到小,Sort后简单的使用Reverse即可。

  评论这张
 
阅读(867)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016