C#冷门系列之ToLookup

 

 1.首先我们有这样一个学生实体,学生与课程是一对多关系

    public class Student
    {
        /// <summary>
        /// Id
        /// </summary>
        public string Id { get; set; }
        /// <summary>
        /// 学生名
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 年龄
        /// </summary>
        public int Age { get; set; }
        /// <summary>
        /// 课程名
        /// </summary>
        public string CourseName { get; set; }
        /// <summary>
        /// 分数
        /// </summary>
        public double Grade { get; set; }
    }

 

需求,统计每个学生所对应的课程及分数

先创建一些模拟数据=>

public static List<Student> GetList()
        {
            return new List<Student>
           {
               new Student {Id = "1",Name = "1", Age = 25, CourseName = "数学", Grade = 85, },
               new Student {Id = "1",Name = "1", Age = 25, CourseName = "英语", Grade = 99, },
               new Student {Id = "2",Name = "2", Age = 27, CourseName = "数学", Grade = 49, },
               new Student {Id = "3",Name = "3", Age = 28, CourseName = "数学", Grade = 77, },
                new Student {Id = "3",Name = "3", Age = 28, CourseName = "英语", Grade = 15, },
               new Student {Id = "4",Name = "4", Age = 25, CourseName = "数学", Grade = 100, }
           };
        }

方案一:GroupBy

var list=list.GroupBy(s => s.Name).ToList();

 

方案二:字典Dictionary

Dictionary<string, List<Student>> dic = new Dictionary<string, List<Student>>();
foreach (var item in GetList())
{
     if (!dic.ContainsKey(item.Name))
     {
          dic.Add(item.Name, new List<Student> { item });
     }
     else
     {
          dic[item.Name].Add(item);
     }
}

 

方案三:ToLookup

var dic=GetList().ToLookup(i => i.Name);
//var dic = list.ToLookup(i => i.Name,s=>"姓名:"+s.CourseName+"\t"+ "成绩:"+s.Grade);

 

控制台输出=>

 var dic=GetList().ToLookup(i => i.Name);
            foreach (var items in dic)
            {
                Console.WriteLine("姓名:"+items.Key);
                foreach (var item in items)
                {
                    Console.WriteLine("\t\t" + "课程名:"+item.CourseName + "  " +"分数:"+ item.Grade);
                }
            }

区别:

Lookup<string,Student>相当于Dictionary<string,List<Student>>

Lookup与GroupBy的区别在于很好的支持索引,可以像字典一样使用dic["key"]

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值