C++ Programmer's Cookbook

{C++ 基础} {C++ 高级} {C#界面,C++核心算法} {设计模式} {C#基础}

c# sort()自定义的结构


用在arraylist。list等容器中sort().对自定义的结构排序!

1   自定义结构实现IComparable interface

如下:默认按id排序
class Empolyee : System.IComparable
{
 
private string m_EmpName;
 
private string m_EmpDept;
 
private int m_EmpID;
 
private decimal m_EmpSalary;
  
 
public Employee(int id, string name,string dept)
 
{
  m_EmpID 
= id;
  m_EmpName 
= name;
  m_EmpDept 
= dept;
  m_EmpSalary 
= 0.0M;
 }

 
public string Name
 
{
  
get{return m_EmpName;}
  
set{m_EmpName=value;}
 }

 
public string Department
 
{
  
get{return m_EmpDept;}
  
set{m_EmpDept=value;}
 }

 
public int ID
 
{
  
get{return m_EmpID;}
  
set{m_EmpID=value;}
 }

 
public decimal Salary
 
{
  
get{return m_EmpSalary;}
  
set{m_EmpSalary=value;}
 }

 
/// 
 
/// Less than zero if this instance is less than obj. 
 
/// Zero if this instance is equal to obj. 
 
/// Greater than zero if this instance is greater than obj. 
 
///
 
///
 
/// This method uses the predefined method Int32.CompareTo 
 
///

 public int CompareTo(object obj)
 
{
  
if(!(obj is Employee))
   
throw new InvalidCastException("This object is not of type Employee");
  
  Employee emp 
= (Employee)obj;
  
//no need to rewrite the code again, we have int.CompareTo ready to use
  return this.ID.CompareTo(emp.ID);
 }

}



compareto()也可以写为:
if(this.ID < emp.ID)
return -1;
else if(this.ID==emp.ID)
return 0;
else
return 1;


但要实现多个选择排序:
可以在类中加如:
public enum SortBy{ID,NAME,SALARY}
private static SortBy m_SortBy = SortBy.NAME;
public static SortBy SortBy
{
get{return m_SortBy;}
set{m_SortBy=value;}
}
重写compareto() :
public int CompareTo(object obj)
{
if(!(obj is Employee))
  throw new InvalidCastException("This object is not of type Employee");

Employee emp = (Employee)obj;
switch(m_SortBy)
{
  case ArrayListSortingDemo.SortBy.ID:
   return this.ID.CompareTo(emp.ID);
  case ArrayListSortingDemo.SortBy.NAME:
   return this.Name.CompareTo(emp.Name);
  case ArrayListSortingDemo.SortBy.SALARY:
   return this.Salary.CompareTo(emp.Salary);
  default:
   goto case ArrayListSortingDemo.SortBy.NAME;
}


2 要实现多种标准排序,还可以给sort()传入自定义的比较函数 int less(object 1,object 2)

3 还可以传如Icomparare ,具体还不知道怎么用?希望指点:-------------------



 


posted on 2006-03-10 14:37 梦在天涯 阅读(2546) 评论(1)  编辑 收藏 引用 所属分类: C#/.NET

评论

# re: c# sort()自定义的结构 2006-04-30 16:58 梦在天涯

但是 .net 2.0 中不支持用delegate() 来sort().  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

EMail:itech001#126.com

导航

统计

  • 随笔 - 461
  • 文章 - 4
  • 评论 - 746
  • 引用 - 0

常用链接

随笔分类

随笔档案

收藏夹

Blogs

c#(csharp)

C++(cpp)

Enlish

Forums(bbs)

My self

Often go

Useful Webs

Xml/Uml/html

搜索

  •  

积分与排名

  • 积分 - 1784845
  • 排名 - 5

最新评论

阅读排行榜