利用Linq对集合元素合并、去重复处理
今天写代码时,需要对一个数组对象中按一定规则合并、去重处理,不想再毫无新意手动写For循环遍历(天天写一样的代码很没劲),于是依旧linq,发现真心方便:
using System;
using System.Collections.Generic;
using System.Linq;namespace LinqTest
{class Program{static void Main(){List<Product> listProduct = new List<Product> {new Product{StockNum=1,ProductNo="01",Tag="a"},new Product{StockNum=2,ProductNo="01",Tag="b"},new Product{StockNum=3,ProductNo="02",Tag="c"},new Product{StockNum=4,ProductNo="02",Tag="d"},new Product{StockNum=5,ProductNo="03",Tag="e"},};//注:处理目标->将"编号(ProductNo)"相同的产品记录,"库存量(StockNum)"合并,"附属标签(Tag)"合并//合并处理listProduct.ForEach(c => {var group = listProduct.Where(a => a.ProductNo == c.ProductNo);c.StockNum = group.Sum(x => x.StockNum);c.Tag = group.Select(t => t.Tag).ToList().Join();});//去重复listProduct = listProduct.Distinct(new ProductNoComparer()).ToList();//输出验证listProduct.ForEach(c =>{Console.WriteLine("ProductNo={0},StockNum={1},Tag={2}", c.ProductNo, c.StockNum, c.Tag);}); //输出结果://ProductNo=01,StockNum=3,Tag=a,b//ProductNo=02,StockNum=7,Tag=c,d//ProductNo=03,StockNum=5,Tag=eConsole.Read();}}/// <summary>/// 工具类(一般开发中,可定义在自己的工具类库里)/// </summary>static class Utils {/// <summary>/// List扩展方法,将List元素用分隔符连接后,返回字符串/// </summary>/// <typeparam name="T"></typeparam>/// <param name="list"></param>/// <param name="splitStr"></param>/// <returns></returns>public static String Join<T>(this List<T> list, string splitStr=","){string result = string.Empty;foreach (var item in list){result += item.ToString() + splitStr;}return result.Trim(splitStr.ToCharArray());}}/// <summary>/// 产品实体类/// </summary>class Product{/// <summary>/// 库存/// </summary>public int StockNum { set; get; }/// <summary>/// 产品编号/// </summary>public String ProductNo { set; get; }/// <summary>/// 附属标签/// </summary>public String Tag { set; get; }}/// <summary>/// 去"重复"时候的比较器(只要ProductNo相同,即认为是相同记录)/// </summary>class ProductNoComparer : IEqualityComparer<Product>{public bool Equals(Product p1, Product p2){if (p1 == null)return p2 == null;return p1.ProductNo == p2.ProductNo;}public int GetHashCode(Product p){if (p == null)return 0;return p.ProductNo.GetHashCode();}}
}
其它编程语言如果都象C#这般犀利,世界就更美好了
利用Linq对集合元素合并、去重复处理相关推荐
- spring中父子bean集合元素合并问题
spring支持集合核定的功能,允许子bean继承父bean的同名属性集合元素,并将子bean中配置的集合属性值和父bean中配置的同名属性值合并起来作为最终bean的属性值: <bean id ...
- java list 合并去重复_java 实现多个list 合并成一个去掉重复的案例
java 实现多个list 合并成一个去掉重复的案例,我就,说了,不多,给大家,代码 java 实现多个list 合并成一个去掉重复的案例 易采站长站,站长之家为您整理了java 实现多个list 合 ...
- 找出不是两个数组共有的元素(学习去重复算法)
描述 给定两个整型数组,本题要求找出不是两者共有的元素. ...
- python去重复记录_Python列表去重复项的N种方法(实例代码)
说明 Python语言中列表(List)与其他语言的数组(Array)类似,是一种有序的集合数据结构,Python List可支持各种数据类型,长度也可动态调整,与JS中的数组或Java ArrayL ...
- Java List去重 Lis集合去重 List去重效率对比 List去重复元素效率对比 List去重效率
Java List去重 Lis集合去重 List去重效率对比 List去重复元素效率对比 List去重效率 --- List 去重复元素的几种办法 一.概述 面试的时候,有个常见的问题:" ...
- List和Set之间的转换:达到集合元素去重复
在项目中看到一段代码: return new ArrayList<>(new HashSet<LabelEnum>(list)); 当时我的表情是这样的: 这把list ...
- Java利用Set集合去重复
需求: 创建一个存储学生对象的集合,存储多个学生对象,使用程序实现在控制台遍历该集合,要求:学生对象的成员变量值相同,我们就认为是同一个对象. 分析: ①定义学生类,创建HashSet集合对象, 创建 ...
- java去重复的集合_如何去除Java中List集合中的重复数据
1.循环list中的所有元素然后删除重复 public class duplicatRemoval { public static List removeDuplicate(List list){ f ...
- 【原创】从 列表的重复 到 用sum展开二层嵌套列表将子元素合并
转载请注明出处:https://www.cnblogs.com/oceanicstar/p/9517159.html ★像R语言里头有rep函数可以让向量的值重复,在python里面可以直接对列表用乘 ...
- java list map 去重复_Java中List集合去除重复数据的六种方法
1. 循环list中的所有元素然后删除重复 public static List removeDuplicate(List list) { for ( int i = 0 ; i < list. ...
最新文章
- ExcelBDD-Java开源组件发布了!
- python发送短信接口_python发送短信和发送邮件
- JAVA多线程及线程状态转换
- HDU 4740 The Donkey of Gui Zhou (模拟)
- node express创建项目步骤
- php c 交互,C语言和go语言之间的交互操作方法
- Raspberry install wine
- javascript 常用小例子收集
- SAP 物料成本核算冻结:料号. 不能过账,是否取消?消息 CK167
- 详述 PROCEDURES_ICD 患者手术情况表 (七)
- kdj买卖指标公式源码_通达信买卖KDJ副图指标公式
- 微信lbs开发java_微信LBS获取
- 盘点淘宝、腾讯、百度内部使用的JavaScript库
- 那个人路过了青春一阵子,却会在记忆里搁浅一辈子
- mysqldb python linux,Linux下安装 MySQLdb模块
- 北京中医药大学《计算机基础》平时作业1
- ozip解密_【ozip转换解包】ROM制作工具已适配机型列表,全网最全!
- 小偷和抢劫是被怎么遏制的?
- SQL SERVER 使用stuff函数进行分组且合并
- Oracle -PL/SQL Developer错误解决方案(ORA-02291)