obj:
class obj
{
    string a;
    string b;
}b的字符串格式为:字母(s1)-数字(s2)-数字(s3)按b字符串排序,排序优先级为:首先按s1升序,如果s1相同,按s2升序,如果s1、s2都相同,按s3升序即:
排序前
a1  a-1-2
a2  b-10-2
a3  a-2-10
a4  a-10-2
a5  a-2-2排序后
a1  a-1-2
a5  a-2-2
a3  a-2-10
a4  a-10-2
a2  b-10-2Comparer0 : IComparer<obj>然后调用List<obj>.Sort(Comparer0);Comparer0 该怎么实现?好像List<obj>.Sort(Comparer0);内部为快速排序,郁闷了好长时间。
如果不用实现IComparer<obj>该如何实现?

解决方案 »

  1.   

     List<obj> list = new List<obj>();
                list.Add(new obj { b = "a-1-2" });
                list.Add(new obj { b = "b-10-2" });
                list.Add(new obj { b = "a-2-10" });
                list.Add(new obj { b = "a-10-2" });
                list.Add(new obj { b = "a-2-2" });
                list.Sort(
                    delegate(obj a, obj b)
                    {
                        string[] valuea = a.b.Split('-');
                        string[] valueb = b.b.Split('-');
                        int result = valuea[0].CompareTo(valueb[0]);
                        if (result==0)
                        {
                            result = int.Parse(valuea[1]) - int.Parse(valueb[1]);
                        }
                        if (result==0)
                        {
                            result = int.Parse(valuea[2]) - int.Parse(valueb[2]);
                        }
                        return result;
                    });
    这个可以满足你的要求。
      

  2.   

    我相信这种应该是你想要的 
    class ClassA : IComparable<ClassA>
        {
            public string a;
            public string b;        public ClassA(string a, string b)
            {
                this.a = a;
                this.b = b;
            }
            #region IComparable<ClassA> 成员        public int CompareTo(ClassA other)
            {
                string[] itemsS = this.b.Split('-');
                string[] itemsO = other.b.Split('-');
                if (itemsS[0].CompareTo(itemsO[0]) == 0)
                {
                    if (int.Parse(itemsS[1]).CompareTo(int.Parse(itemsO[1])) == 0)
                    {
                        return int.Parse(itemsS[2]).CompareTo(int.Parse(itemsO[2]));
                    }
                    else
                    {
                        return int.Parse(itemsS[1]).CompareTo(int.Parse(itemsO[1]));
                    }
                }
                else
                {
                    return itemsS[0].CompareTo(itemsO[0]);
                }
            }        #endregion
        }