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>该如何实现?
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>该如何实现?
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;
});
这个可以满足你的要求。
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
}