首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET IComparable:如何实现

.NET IComparable:如何实现
EN

Stack Overflow用户
提问于 2011-08-12 17:38:00
回答 4查看 372关注 0票数 1

我有一个需要排序的对象集合,但不确定如何排序。

有一个名为Prop1的字符串属性,我想按它进行排序。我想根据包含所有可能的Prop1值的字符串列表进行排序。

代码语言:javascript
复制
List<string> precedence = new List<string>() { "firstPrecedence", "secondPrecedence" ....

我如何实现我的CompareTo(object obj)方法?

我正在试着这样做,但我真的不知道我在做什么!

代码语言:javascript
复制
    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;
    }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-12 17:43:42

好吧,如果您的优先列表在编译时是已知的,并且您可以使用它,那么您可以比较您正在排序的值的索引

代码语言:javascript
复制
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<>,它允许您以一种更强类型的方式实现这一点:

代码语言:javascript
复制
public class Filter : IComparable<Filter>
{

}

我相信一些聪明的人会在LINQ中给你一个解决方案。

票数 1
EN

Stack Overflow用户

发布于 2011-08-12 17:45:47

试试这个(假设你有一个List<Filter> )

代码语言:javascript
复制
filterObjectList.Sort((f1,f2) => precedence.IndexOf(f1.FilterValue).CompareTo(precedence.IndexOf(f2.FilterValue));
票数 1
EN

Stack Overflow用户

发布于 2011-08-12 17:51:21

使用LINQ:

代码语言:javascript
复制
precedence.SelectMany(p => objs.Where(o => o.Prop1 == p));

代码语言:javascript
复制
objs.Select(s => new { Index = precedence.IndexOf(s.Prop1), Obj = s })
                .OrderBy(a => a.Index).Select(a => a.Obj);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7038256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档