A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李栋Jelly 中级黑马   /  2012-11-6 12:07  /  1883 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李栋Jelly 于 2012-11-24 19:40 编辑

CompareTo是怎样进行排序的, 我设置断点看的每次给TheValue赋值都不是按数组顺序依次赋值比较的,而且还有重复的。  求解释CompareTo
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;

  5. namespace Csharp面向对象_接口IComparable
  6. {
  7.     //定义一种特定于类型的通用比较方法,值类型或类通过实现此方法对其实例进行排序。
  8.     class MyClass : IComparable
  9.     {
  10.         public int TheValue;
  11.         public int CompareTo(object obj)
  12.         {
  13.             MyClass mc = (MyClass)obj;
  14.             if (this.TheValue < mc.TheValue) return -1;
  15.             if (this.TheValue > mc.TheValue) return 1;
  16.             return 0;
  17.         }
  18.     }
  19.     class Program   
  20.     {
  21.         static void PrintOut(string s, MyClass[] mc)
  22.         {
  23.             Console.Write(s);
  24.             foreach (MyClass m in mc)
  25.             {
  26.                 Console.Write("\t" + m.TheValue);
  27.             }
  28.             Console.WriteLine(" ");
  29.         }
  30.         static void Main(string[] args)
  31.         {
  32.             int[] myInt = { 20, 4, 16, 9, 2 };
  33.             MyClass[] mcArr = new MyClass[5];
  34.             for (int i = 0; i < 5; i++)
  35.             {
  36.                 mcArr[i] = new MyClass();
  37.                 mcArr[i].TheValue = myInt[i];
  38.             }
  39.             PrintOut("Initial Order:  ", mcArr);
  40.             Array.Sort(mcArr);
  41.             PrintOut("Sorted  Order:  ", mcArr);
  42.             Console.ReadKey();
  43.         }
  44.     }
  45. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

2 个回复

倒序浏览
你的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类型就可以直接使用了。

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
在调用CompareTo方法时已经将TheValue转换成Object类型了,   我要知道的是CompareTo是怎样进行排序的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马