2011-09-15 42 views
1

我试图重构2.0框架的下面的代码(工作时需要)。下面的代码是根据previous post提供的,我试图找出如何对列表列表进行排序。这与讨论有点切线。下面是代码:使用Framework 2.0实现IComparable

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(委托(INT I1,I2 INT)=>

感谢您的帮助

回答

0

IComparable是你,你希望能够成为一个类实现一个接口...可比,Sort方法知道如何使用IComparable接口立即工作,所以,如果你想使用Sort方法排序,您的班级必须实施IComparable否则,当您在班级中致电CompareTo时,您如何期望排序算法知道班级在逻辑上的排序方式?

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

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

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

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

int(这是元素在List类型)上已经有CompareTo

这是回答这个问题吗?

0

问题是,ArrayList的返回对象对象不实现IComparable

?。

所以,当你说弹出式列表[12] .CompareTo(等等),你正在呼吁对象的函数不存在。