黑马程序员技术交流社区
标题:
CompareTo排序问题
[打印本页]
作者:
李栋Jelly
时间:
2012-11-6 12:07
标题:
CompareTo排序问题
本帖最后由 李栋Jelly 于 2012-11-24 19:40 编辑
CompareTo是怎样进行排序的, 我设置断点看的每次给TheValue赋值都不是按数组顺序依次赋值比较的,而且还有重复的。 求解释CompareTo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Csharp面向对象_接口IComparable
{
//定义一种特定于类型的通用比较方法,值类型或类通过实现此方法对其实例进行排序。
class MyClass : IComparable
{
public int TheValue;
public int CompareTo(object obj)
{
MyClass mc = (MyClass)obj;
if (this.TheValue < mc.TheValue) return -1;
if (this.TheValue > mc.TheValue) return 1;
return 0;
}
}
class Program
{
static void PrintOut(string s, MyClass[] mc)
{
Console.Write(s);
foreach (MyClass m in mc)
{
Console.Write("\t" + m.TheValue);
}
Console.WriteLine(" ");
}
static void Main(string[] args)
{
int[] myInt = { 20, 4, 16, 9, 2 };
MyClass[] mcArr = new MyClass[5];
for (int i = 0; i < 5; i++)
{
mcArr[i] = new MyClass();
mcArr[i].TheValue = myInt[i];
}
PrintOut("Initial Order: ", mcArr);
Array.Sort(mcArr);
PrintOut("Sorted Order: ", mcArr);
Console.ReadKey();
}
}
}
复制代码
作者:
马纵驰
时间:
2012-11-6 12:48
你的Thevalue是int类型的必须转成new Integer对象类型行进行compareTo进行比较
MyClass mc = (MyClass)obj;
15. if (this.TheValue < mc.TheValue) return -1;
16. if (this.TheValue > mc.TheValue) return 1;
17. return 0;
可以这么写
int num = new Integer(this.TheValue).compareTo(new Integer(mc.TheValue));
if (num==0)
return 0;
return num.
注意int整形是没有compareTo的方法的。只有对象有。所以要转成Integer类型的进行比较。举个例子你如果要是String类型就可以直接使用了。
作者:
李栋Jelly
时间:
2012-11-6 13:03
在调用CompareTo方法时已经将TheValue转换成Object类型了, 我要知道的是CompareTo是怎样进行排序的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2