this 方面的问题.

handsome1234 2009-01-19 02:42:20

public enum enuSortOrder
{IDAsc, IDDesc, RankAsc, RankDesc}

public class Person : IComparable
{
public static enuSortOrder intSortOrder = enuSortOrder.IDAsc;

public int ID;
public string Rank;

public Person(int id, string rank)
{ this.ID=id; this.Rank = rank; }

public int CompareTo(object obj)
{
Person p = (Person)obj;
switch ((int)intSortOrder)
{
case (int)enuSortOrder.IDAsc:
return this.ID.CompareTo(p.ID);// 问题是this这里的具体值不断的发生变化,他是怎么发生变化的?
}
}

private int RankCompare(string rank1, string rank2)
{
...
}

private int ConvertRankToInt(string rank)
{
...
}
}

class SortArrayList
{
static void Main(string[] args)
{
ArrayList list = new ArrayList();
list.Add(new Person(6, "排长"));
list.Add(new Person(3, "团长"));
list.Add(new Person(4, "司令"));
list.Add(new Person(5, "旅长"));
list.Add(new Person(7, "连长"));
list.Add(new Person(1, "军长"));
list.Add(new Person(2, "营长"));
list.Add(new Person(8, "师长"));

list.Sort();
Console.WriteLine("Sort By ID Asc:");
foreach (Person person in list)
{
Console.WriteLine("ID: " + person.ID.ToString() + ", Rank: " + person.Rank);
}
}
}
...全文
104 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
robertwang0499 2009-02-13
  • 打赏
  • 举报
回复
我的不是特别明白!学习下,帮顶了
feiyun0112 2009-02-13
  • 打赏
  • 举报
回复
使用 QuickSort 算法
http://hi.baidu.com/jzinfo/blog/item/bd8d97cae1d15e86c91768c8.html
handsome1234 2009-01-19
  • 打赏
  • 举报
回复
备注
array 中的每个元素均必须实现 IComparable 接口,才能与 array 中的其他所有元素进行比较。

如果排序不能成功地完成,则结果未定义。

此方法使用 QuickSort 算法。此实现执行不稳定排序;亦即,如果两元素相等,则其顺序可能不被保留。相反,稳定排序保留相等元素的顺序。

一般情况下,此方法的运算复杂度为 O(n log n),其中 n 是 array 的 Length;最坏的情况下其运算复杂度为 O(n ^ 2)。
handsome1234 2009-01-19
  • 打赏
  • 举报
回复
第一个问题我清楚了,list是逐个调用它的Person的实例(按照下标逐一访问),但是CompareTo(object obj)里面的obj参数是怎么确定的?我debug看了一下,他的顺序和下标没有关系,他的顺序和什么有关啊?
handsome1234 2009-01-19
  • 打赏
  • 举报
回复
能否讲得详细点?
1\list本身就是含有多个person对象,他的sort方法,调用CompareTo方法,他是多个person对象,怎么知道每次运行的是person的那个实例?也就是说这个obj,我怎么知道他这次调用的是旅长,而不是师长这个实例?
2\还有 CompareTo(object obj) ,这个obj,我怎么知道他这次调用的是旅长,而不是师长这个实例?
他们调用的原则是什么?
feiyun0112 2009-01-19
  • 打赏
  • 举报
回复
Person对象实例

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)

http://feiyun0112.cnblogs.com/

111,131

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧