在.NET里轻松有效地给数组排序

ZDNet软件频道 时间:2003-06-16 作者:ZDNet China |  我要评论()
本文关键词:
给数组排序是一项常见的编程任务,.NET里一个新的工具接口(utility interface)让这个任务成为一项轻松的工作。这项技术的主要好处是:你可以将排序类(sorting class)同数组的内容剥离开来。
本文译自Builder.com,未经许可请勿转载 给数组排序是一项常见的编程任务,.NET里一个新的工具接口(utility interface)让这个任务成为一项轻松的工作。这项技术的主要好处是:你可以将排序类(sorting class)同数组的内容剥离开来。为了说明这一点,我会让整个过程很简单,并给一个使用C#的字符串数组进行排序。
 

string[] names;
names = new string[5];

string[0] = “Erika Anhood”;
string[1] = “Ayal Belling”;
string[2] = “Jack Daniels”;
string[3] = “Kris Kringle”;
string[4] = “Santa Claus”;

 
要按照字母顺序给这个数组排序,我们会使用Array类的sort方法来给names数组进行排序。Array.Sort方法会将这个数组按要求排列,这就意味着我们不需要创建另一个数组。Listing A里的代码会将这个数组排序,然后使用foreach陈述式在里面循环,并将值输出到控制台。

现在让我们更进一步创建一个Employee(雇员)类,如Listing B所示。

Listing C里,我们创建了一个Employee数组。

让我们再次尝试使用Array.Sort()来将其排序。你会发现Listing D里的代码在Array.Sort 这一行会出现一个IComparer的异常。

这个错误会发生是因为Array.Sort不知道如何给Employee数组排序。是应该按照Firstname(名)字段排序呢?还是Lastname(姓)字段?这个异常只不过表示你没有指明应该如何排序。你可以通过在Employee类上实现Icomparable接口来达到这个目的:
 
public class Employee:  IComparable
 
使用Visual Studio .NET的扩展类查看器(Expand Class Viewer),你就可以看到Icomparable接口。右击它,选择Add(添加)| Implement Interface(实现接口)。在完成这个以后,你应该能够看到接口的实现了。

Icomparable接口具有一个带有下列签名的CompareTo:
 
public abstract virtual System.Int32 CompareTo ( System.Object obj )
 
这种方法会返回一个整数,用来表示两个被比较对象(被比较字)的相对顺序。这样就可能返回三个值:

  • 负值,表示当前的实例要比obj小。
  • 零,表示当前实例和obj相等。
  • 正值,表示当前的实例要比obj大。

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134