我有一个需要排序的对象集合,但不确定如何排序。
有一个名为Prop1的字符串属性,我想按它进行排序。我想根据包含所有可能的Prop1值的字符串列表进行排序。
List<string> precedence = new List<string>() { "firstPrecedence", "secondPrecedence" ....我如何实现我的CompareTo(object obj)方法?
我正在试着这样做,但我真的不知道我在做什么!
public int CompareTo(object obj)
{
List<string> precedence = new List<string>() { "firstPrecedence", "secondPrecedence", "thirdPrecedence" };
Filter filterOther = obj as Filter;
foreach (var item in precedence)
{
return String.Compare(filterOther.FilterValue, item);
}
return 0;
}发布于 2011-08-12 17:43:42
好吧,如果您的优先列表在编译时是已知的,并且您可以使用它,那么您可以比较您正在排序的值的索引:
private static List<string> Precedence = new List<string>() { "item1", "item2", "item3" }; // etc
public int CompareTo(object obj)
{
Filter item = obj as Filter; // Assume not null.
int otherIndex = Precedence.IndexOf(item.FilterValue);
int thisIndex = Precedence.IndexOf(this.FilterValue); // Assume 'this' is a Filter
// This may need to be otherIndex.CompareTo(thisIndex) depending on the direction of sort you want.
return thisIndex.CompareTo(otherIndex);
}如果FilterValue值不在列表中,IndexOf将返回-1,它在这里的排序实现中仍然有效,但可以在列表的顶部或底部排序...我永远记不住是哪一个!
请注意,CompareTo方法返回0、小于0的值或大于0的值。通常为-1、0和1。
此外,还有一个通用的IComparable<>,它允许您以一种更强类型的方式实现这一点:
public class Filter : IComparable<Filter>
{
}我相信一些聪明的人会在LINQ中给你一个解决方案。
发布于 2011-08-12 17:45:47
试试这个(假设你有一个List<Filter> )
filterObjectList.Sort((f1,f2) => precedence.IndexOf(f1.FilterValue).CompareTo(precedence.IndexOf(f2.FilterValue));发布于 2011-08-12 17:51:21
使用LINQ:
precedence.SelectMany(p => objs.Where(o => o.Prop1 == p));或
objs.Select(s => new { Index = precedence.IndexOf(s.Prop1), Obj = s })
.OrderBy(a => a.Index).Select(a => a.Obj);https://stackoverflow.com/questions/7038256
复制相似问题