新凡

  博客园 :: 首页 :: :: 联系 :: 订阅 :: 管理 ::

用类建立一个复杂的集合

一个简单的学生类 根据需要可以扩展

    // 一个简单的学生类 根据需要可以扩展
    // IComparable实现根据某一字段排序
    public sealed class ClassInfo : IComparable
    {
        // 信息
        public int Id { get; set; }
        public string Name { get; set; }
        public int Sex { get; set; }

        public override string ToString()
        {
            return string.Format("学号:{0}、姓名:{1}、性别", Id, Name, Sex);
        }

        public int CompareTo(object obj)
        {
            if (obj is ClassInfo)
            {
                return Id.CompareTo(((ClassInfo)obj).Id);
            }

            return 1;
        }
    }

 

生成实例

        public static List<ClassInfo> GetList()
        {
            var products = new List<ClassInfo> { 
                new ClassInfo { Id = 1, Name = "张三", Sex = 0},
                new ClassInfo { Id = 3, Name = "王五", Sex = 0},
                new ClassInfo { Id = 2, Name = "李四", Sex = 1}
            };
            return products;
        }

对生成对象进行操作,例如分组,检索等

            // 建立对象
            List<ClassInfo> classInfo = GetList();

            // 根据学号排序 使用类内部的CompareTo实现
            classInfo.Sort();

            // 根据姓名排序 用IComparer<ClassInfo>实现
            classInfo.Sort((s1, s2) => s1.Name.CompareTo(s2.Name));

            // 循环取得排序后的名字
            classInfo.ForEach(s => Console.WriteLine(s.Name));

            // ClassInfo.ToString()
            classInfo[0].ToString();
            
            // 根据性别分组(lamda表达式)
            var groups = classInfo.GroupBy(p => p.Sex);
            foreach (var group in groups)
            {
                // 每个分组中的元素数
                int count = group.Count();
                // group.Key 为分组的关键字 Sex
                foreach (var item in group)
                {
                    // item 为学生信息
                }
            }

            // 查找学号为1的同学
            // Find为符合条件第一条记录.FindAll为所有符合条件记录
            var userInfo = classInfo.Find(p => p.Id == 1);

            // 删除所有性别为男的同学
            classInfo.RemoveAll(p => p.Sex == 1);
        }

 另:IComparer<ClassInfo>的实现如下

    public class NameComparer : IComparer<ClassInfo>
    {
        public int Compare(ClassInfo x, ClassInfo y)
        {
            return x.Name.CompareTo(y.Name);
        }
    }

    // 调用
    classInfo.Sort(new NameComparer());

 

 

posted on 2012-07-08 19:31  新凡  阅读(140)  评论(0)    收藏  举报