我设计了一个类,它基本上只是一个存储一段数据的大量属性的对象。我在课堂上实现了IComparable。该类的对象被实例化并存储在List中。
还有一个复杂程度,即对象的某些字段决定了我排序的字段(有一个层次结构)因此层次结构是:
有几个标志(bool字段)确定是否在排序层次结构中使用了上述两个。
在相对较小的列表(n = 1000)上进行排序的性能很差,通常约为500毫秒。
我不确定我是否正确实施了比较器。 我的方法如下:
public int CompareTo(Exposure rfpe)
{
if (Name.CompareTo(rfpe.Name) != 0)
return Name.CompareTo(rfpe.Name);
else
{
if (AllowProductGroupingInd == false)
{
if (ProductId.CompareTo(rfpe.ProductId) != 0)
return ProductId.CompareTo(rfpe.ProductId);
}
if (NetGroup.CompareTo(rfpe.NetGroup) != 0)
return NetGroup.CompareTo(rfpe.NetGroup );
else if (AllowDateGroupingInd == false)
{
if (Date.CompareTo(rfpe.Date) != 0)
return Date.CompareTo(rfpe.Date);
else
return 0;
}
return 0;
}
}
我正在使用C#3.0,所以我不能使用LINQ。这是我想要完成的合理实施吗?有更优雅的解决方案吗?在我看来,我可能会使用太多的条件,但我不确定如何解决这个问题。
答案 0 :(得分:0)
您似乎是双重调用每个辅助CompareTo
方法,第一个方法很可能是性能方面的罪魁祸首。
int nameCompare = Name.CompareTo(rfpe.Name);
if (nameCompare != 0)
return nameCompare;
else
...