使用Framework 2.0实现IComparable

本文关键字:实现 IComparable Framework 使用 | 更新日期: 2023-09-27 18:08:46

我正在尝试为2.0框架重构以下代码(在工作中需要)。下面的代码是根据之前的一篇文章提供的,我试图弄清楚如何对数组列表的字典进行排序。这有点离题了。下面是代码:

 MultiDimDictList myDicList = new MultiDimDictList();
myDicList.Add("fly", a_fly);
myDicList.Add("img", a_img);
myDicList.Add("bar", a_bar);
myDicList.Add("meter", a_meter);
myDicList.Add("block", a_block);
myDicList.Add("popularity", a_pop); 
List<int> OrderedByPopularity = new List<int>();
ArrayList popList = myDicList["popularity"];
for (int i = 0; i < popList.Count; ++i)
{
    OrderedByPopularity.Add(i);
}
OrderedByPopularity.Sort((i1, i2) => 
{ 
    return popList[i2].CompareTo(popList[i1]); 
});

当我尝试运行上面的代码时,最底部的逻辑给了我问题-即,"CompareTo"不被识别。我已经做了一些关于这方面的阅读,看起来我必须实施IComparable才能使其工作,但我可以在这里使用一些帮助/建议。我应该在哪里实现IComparable?此外,编译器还告诉我为我的。sort方法使用"委托"。.Sort(delegate(int i1, int i2) => ?

谢谢你的帮助。

使用Framework 2.0实现IComparable

IComparable是一个接口,你可以在你想要的类上实现它。Sort方法一开始就知道如何使用IComparable接口。因此,如果您想使用sort方法进行排序,那么您的类必须实现IComparable,否则,当您在类上调用CompareTo时,您如何期望排序算法知道您的类在逻辑上是如何排序的?

这是关于IComparable如何工作的一些背景,但它看起来不像这里的问题,除非我误读。看起来你在尝试:

  1. 用一串整数填充OrderedByPopularity
  2. 对整数排序。

如果你真的想对列表中的整数排序,你应该只需要使用

(i1, i2) => 
{ 
    return i1.CompareTo(i2); 
}

int(即List中的元素类型)上已经有CompareTo

这回答问题了吗?

问题是ArrayList返回object。对象没有实现IComparable.

所以当你说popList[i2]. compareto(等等)时,你是在调用一个不存在的对象的函数