0

我设计了一个类,它基本上只是一个存储大量数据属性的对象。我已经在课堂上实现了 IComparable。类的对象被实例化并存储在列表中。

对象的某些字段决定了我对哪些字段进行排序(存在层次结构),因此层次结构是:

  • 1) 名称(在实例化时定义)
  • 2)产品(在实例化时定义)
  • 3)NetGroup(定义后实例化,在初始创建列表后,我迭代回来,执行计算,并设置组。)
  • 4) 日期(在实例化时定义)

有几个标志(布尔字段)确定是否在排序层次结构中使用上述两个。

  • 5) AllowProductGroupingInd(在实例化时定义)
  • 6) AllowDateGroupingInd(在实例化时定义)

在相对较小的列表(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。这是我想要完成的合理实现吗?有没有更优雅的解决方案?在我看来,我可能使用了太多条件,但我不确定如何解决这个问题。

4

1 回答 1

0

您似乎重复调用了每个辅助CompareTo方法,第一个很可能是性能方面的罪魁祸首。

int nameCompare = Name.CompareTo(rfpe.Name);

if (nameCompare != 0)
   return nameCompare;
else
   ...
于 2010-08-19T05:16:32.503 回答