合并两个序列
| var res = list1.Concat(list2); |
去掉重复元素
| var res = arr.Distinct(); |
筛选两个序列中的差异元素
| |
| var res = list1.Except(list2); |
筛选以什么开头的信息
| |
| var res = list1.Where(q=>q.PhoneNo.StartsWith("178")); |
将对象转换为字典集合
| Production[] prds = |
| { |
| new Production |
| { |
| PID = 4007, |
| Name = "产品 1", |
| Size = 123.45f, |
| Quantity = 65 |
| }, |
| new Production |
| { |
| PID = 4008, |
| Name = "产品 2", |
| Size = 77.01f, |
| Quantity = 100 |
| } |
| }; |
| |
| IDictionary<int, string> dic = prds.ToDictionary(p => p.PID, p => p.Name); |
将原始数据进行分组
本例使用此重载形式:
| public static IEnumerable<TResult> GroupBy<TSource, TKey, TResult>( |
| this IEnumerable<TSource> source, |
| Func<TSource, TKey> keySelector, |
| Func<TKey, IEnumerable<TSource>, TResult> resultSelector |
| ); |
- TSource是源数据中的元素,TKey是分组依据,TResult是返回调用方的元素类型。
- keySelector用于产生分组依据。
- resultSelector用于产生分组结果,它有两个参数,第一个是分组依据,即分组的"标题",第二个是隶属于该分组下的元素子序列。
| class Program |
| { |
| static void Main(string[] args) |
| { |
| Student[] stus = |
| { |
| new Student{ ID = 201, Name = "小王", Course = "C"}, |
| new Student{ ID = 202, Name = "小曾", Course = "C++"}, |
| new Student{ ID = 203, Name = "小吕", Course = "C++"}, |
| new Student{ ID = 204, Name = "小孙", Course = "C#"}, |
| new Student{ ID = 205, Name = "小郑", Course = "C"}, |
| new Student{ ID = 206, Name = "小叶", Course = "C"}, |
| new Student{ ID = 207, Name = "小苏", Course = "C#"}, |
| new Student{ ID = 208, Name = "小梁", Course = "Delphi"} |
| }; |
| |
| var result = stus.GroupBy(s => s.Course, (gKey, gItems) |
| => (GroupKey: gKey, ItemCount: gItems.Count(), Items: gItems)); |
| |
| Console.WriteLine("学员参与课程汇总:"); |
| StringBuilder strbuilder = new StringBuilder(); |
| foreach(var g in result) |
| { |
| strbuilder.AppendFormat("课程:{0}\n", g.GroupKey); |
| strbuilder.AppendFormat(" 参与人数:{0}\n", g.ItemCount); |
| strbuilder.AppendLine(" 名单:"); |
| foreach (Student s in g.Items) |
| { |
| strbuilder.AppendFormat(" {0} - {1}\n", s.ID, s.Name); |
| } |
| } |
| Console.WriteLine(strbuilder); |
| Console.Read(); |
| } |
| } |
| |
| public class Student |
| { |
| public int ID { get; set; } |
| public string Name { get; set; } |
| public string Course { get; set; } |
| } |
结果:
| 学员参与课程汇总: |
| 课程:C |
| 参与人数:3 |
| 名单: |
| 201 - 小王 |
| 205 - 小郑 |
| 206 - 小叶 |
| 课程:C++ |
| 参与人数:2 |
| 名单: |
| 202 - 小曾 |
| 203 - 小吕 |
| 课程:C# |
| 参与人数:2 |
| 名单: |
| 204 - 小孙 |
| 207 - 小苏 |
| 课程:Delphi |
| 参与人数:1 |
| 名单: |
| 208 - 小梁 |
分组并取出最大数
| List<People> peoples = new List<People> |
| { |
| new People {Id=1,Name="张三",Amount =12 }, |
| new People {Id=2,Name="张三",Amount =13 }, |
| new People {Id=3,Name="李四",Amount =10 }, |
| new People {Id=4,Name="李四",Amount =11 } |
| }; |
| |
| var list1 = peoples.OrderByDescending(q => q.Amount).GroupBy(q => q.Name).Select(q => q.First()).ToList(); |
| |
| var list2 = peoples.GroupBy(q => q.Name).Select(q => q.First(g => g.Amount == q.Max(a => a.Amount))).ToList(); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)