利用Linq对集合元素合并、去重复处理
2014-08-12 09:24
423 查看
本文转载:http://www.cnblogs.com/yjmyzz/archive/2012/12/18/2823170.html
今天写代码时,需要对一个数组对象中按一定规则合并、去重处理,不想再毫无新意手动写For循环遍历(天天写一样的代码很没劲),于是依旧linq,发现真心方便:
其它编程语言如果都象C#这般犀利,世界就更美好了
今天写代码时,需要对一个数组对象中按一定规则合并、去重处理,不想再毫无新意手动写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=e Console.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对集合元素合并、去重复处理
- 利用Linq对集合元素合并、去重复处理
- 去除List<Object>集合中重复的元素(利用HashSet的特性---无重复元素)
- 合并两个集合元素:遵循集合元素不重复的原则,已经存在的元素不再插入
- 利用Set List Map集合的特点处理重复字符串
- linq 根据指定条件返回集合中不重复的元素
- [Set集合]利用Set集合的不重复元素的特性来实现数组去重
- 高效出去List集合和数组中的重复元素
- SQL SERVER2000教程-第五章 处理数据 第二十二节 利用UNION对多条SQL查询语句合并生成表
- 利用DWR处理回调函数返回的list集合,并填充select
- 利用集合的静态方法Collections.shuffle() 乱序集合中的元素,实现自动理牌
- java 集合 Set 插入重复元素
- 删除集合中重复的元素
- SQL SERVER2000教程-第五章 处理数据 第二十二节 利用UNION对多条SQL查询语句合并生成表
- Linq to DataTable 合并结构相同的 个DataTable 且已重复的行不合并
- jquery之管理包装元素集合(利用关系获取包装集)
- 利用LINQ 表达式实现跨服务器查询(大数据处理)
- 数组合并并删除重复的元素
- 把一个具有5个元素的集合划分成三个子集(允许重复),c实现版本
- 多个php数组的元素值的无重复合并