+ -
当前位置:首页 → 问答吧 → List<MyClass>使用的问题

List<MyClass>使用的问题

时间:2011-12-23

来源:互联网

比如
C# code

    class Keyword 
    {
        public int StartIndex;
        public int EndIndex;
        public int Count;
        public string KeyWordString;
}


然后我想用C# code
public List<Keyword> IndexResultList;

但是如果IndexResultList.Contains(item) 如果item的KeyWordString在IndexResultList中存在 就算包含
是要重写哪个方法?

还有一个问题 是如果IndexResultList.Sort()时候 想按照Count来sort是重写哪个方法


求一个简单的实例

作者: hypnoz2012spring   发布时间: 2011-12-23

Keyword 的CompareTo

作者: sunzongbao2007   发布时间: 2011-12-23

需要实现IComparable接口

作者: sunzongbao2007   发布时间: 2011-12-23

用linq 啊,

public bool ResultContains(Keyword item)
{

  return IndexResultList.Any(0=>o.KeyWordString = item.KeyWordString) ;
}

作者: ruanwei1987   发布时间: 2011-12-23

C# code

class Keyword:IComparable
    {
        public int StartIndex;
        public int EndIndex;
        public int Count;
        public string KeyWordString;

        /// <summary>
        /// 小于零  此对象小于 CompareTo 方法指定的对象。
        /// 零      此对象等于方法参数。
        /// 大于零  此对象大于方法参数。
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public int CompareTo(object obj)
        {
            if (obj is Keyword)
            {
                Keyword other = obj as Keyword;
                return this.StartIndex - other.StartIndex;
                //if you want to compare KeyWordString ,do next
                //return this.KeyWordString.CompareTo(other.KeyWordString);

            }
            else 
            {
                throw new InvalidCastException();
            }
        }
    }

作者: sunzongbao2007   发布时间: 2011-12-23

鸡蛋= =还我三连贴。

作者: sunzongbao2007   发布时间: 2011-12-23

实现IComparable接口

作者: qiuyu820968   发布时间: 2011-12-23

C# code

  IndexResultList.OrderBy(x => x.Count); //升序
  IndexResultList.OrderByDescending(x => x.Count);//降序

            Keyword item=new Keyword ();
            if (IndexResultList.Count(x => x.KeyWordString.ToUpper().Equals(item.KeyWordString.ToUpper())) > 0)
            {//表示IndexResultList这个集合中字段KeyWordString等于item的KeyWordString的实体个数大于0
                //也就是你所说的IndexResultList中就算包含这个item这个元素
            }

作者: cykb518   发布时间: 2011-12-23

不用重写方法,用委托即可:
C# code
    protected void Page_Load(object sender, EventArgs e)
    {
        List<Keyword> IndexResultList = new List<Keyword>();
        for (int i = 0; i < 10; i++)
        {
            Keyword keyword = new Keyword();
            keyword.KeyWordString = i.ToString();
            if (i == 5)
                keyword.KeyWordString = "cat";
            IndexResultList.Add(keyword);
        }
        Predicate<Keyword> p = new Predicate<Keyword>(ABC);
        Response.Write(IndexResultList.Exists(p));
    }
    private bool ABC(Keyword keyword)
    {
        if (keyword.KeyWordString == "cat")
            return true;
        else
            return false;
    }
    class Keyword
    {
        public int StartIndex;
        public int EndIndex;
        public int Count;
        public string KeyWordString;
    }

作者: dalmeeme   发布时间: 2011-12-23

这样写也可以:
C# code
        List<Keyword> IndexResultList = new List<Keyword>();
        for (int i = 0; i < 10; i++)
        {
            Keyword keyword = new Keyword();
            keyword.KeyWordString = i.ToString();
            if (i == 5)
                keyword.KeyWordString = "cat";
            IndexResultList.Add(keyword);
        }
        Response.Write(IndexResultList.Exists(delegate(Keyword keyword)
        {
            if (keyword.KeyWordString == "cat")
                return true;
            else
                return false;
        }
        ));
    }
    class Keyword
    {
        public int StartIndex;
        public int EndIndex;
        public int Count;
        public string KeyWordString;
    }

作者: dalmeeme   发布时间: 2011-12-23

条条大路通罗马,这是真的。

作者: sunzongbao2007   发布时间: 2011-12-23

楼上的,现在有拉姆达表达式,其实也是委托原理,还需要自己去定义委托来搞的那么复杂?

作者: cykb518   发布时间: 2011-12-23

拉姆达表达式2.0下能用吗?我这个是通用的。

后一个sort问题:
C# code
    protected void Page_Load(object sender, EventArgs e)
    {
        List<Keyword> IndexResultList = new List<Keyword>();
        for (int i = 0; i < 10; i++)
        {
            Keyword keyword = new Keyword();
            keyword.Count = 10 - i;
            keyword.KeyWordString = i.ToString();
            IndexResultList.Add(keyword);
        }
        Comparison<Keyword> c = new Comparison<Keyword>(DEF);
        IndexResultList.Sort(c);
        foreach (Keyword keyword in IndexResultList)
            Response.Write(keyword.Count + "<br/>");
    }
    private int DEF(Keyword keyword1, Keyword keyword2)
    {
        if (keyword1.Count > keyword2.Count)
            return 1;
        else
            if (keyword1.Count < keyword2.Count)
                return -1;
            else
                return 0;
    }
    class Keyword
    {
        public int StartIndex;
        public int EndIndex;
        public int Count;
        public string KeyWordString;
    }

作者: dalmeeme   发布时间: 2011-12-23

或者:
C# code
    protected void Page_Load(object sender, EventArgs e)
    {
        List<Keyword> IndexResultList = new List<Keyword>();
        for (int i = 0; i < 10; i++)
        {
            Keyword keyword = new Keyword();
            keyword.Count = 10 - i;
            keyword.KeyWordString = i.ToString();
            IndexResultList.Add(keyword);
        }
        IndexResultList.Sort(delegate(Keyword keyword1, Keyword keyword2)
        {
            if (keyword1.Count > keyword2.Count)
                return 1;
            else
                if (keyword1.Count < keyword2.Count)
                    return -1;
                else
                    return 0;
        });
        foreach (Keyword keyword in IndexResultList)
            Response.Write(keyword.Count + "<br/>");
    }

    class Keyword
    {
        public int StartIndex;
        public int EndIndex;
        public int Count;
        public string KeyWordString;
    }

作者: dalmeeme   发布时间: 2011-12-23

实现List结合的那些委托即可。
如果允许也可以是用扩展方法或者LINQ

作者: jiezi316   发布时间: 2011-12-23