我正在尝试重构2.0框架的下面代码(在工作中需要)。下面的代码是根据previous post提供的,其中我试图弄清楚如何对arraylists字典进行排序。这与讨论有点相似。以下是代码:
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)=&gt;?
感谢您的帮助。
答案 0 :(得分:0)
问题是ArrayList返回对象。 Object没有实现IComparable。
所以当你说popList [i2] .CompareTo(blah)时,你正在调用一个不存在的对象上的函数。
答案 1 :(得分:0)
IComparable是一个接口,您可以在一个类上实现,以便能够......具有可比性。 Sort方法知道如何直接使用IComparable接口。因此,如果您想使用Sort方法进行排序,那么您的类必须实现IComparable
否则,当您在课程上调用CompareTo
时,您希望排序算法如何知道您的课程逻辑分类?
这是关于IComparable
如何运作的一些背景知识,但除非我误读,否则它看起来不像是问题。看起来你正试图:
OrderedByPopularity
。如果你真的想要对列表中的整数进行排序,你应该只需要使用
(i1, i2) =>
{
return i1.CompareTo(i2);
}
int
(List
中的元素类型)已经有CompareTo
。
这是否回答了这个问题?