利用Linq对集合元素合并、去重复处理

简介: 本文转载:http://www.cnblogs.com/yjmyzz/archive/2012/12/18/2823170.html 今天写代码时,需要对一个数组对象中按一定规则合并、去重处理,不想再毫无新意手动写For循环遍历(天天写一样的代码很没劲),于是依旧linq,发现真心方便: using System; using System.

本文转载:http://www.cnblogs.com/yjmyzz/archive/2012/12/18/2823170.html

今天写代码时,需要对一个数组对象中按一定规则合并、去重处理,不想再毫无新意手动写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#这般犀利,世界就更美好了 

目录
相关文章
|
4月前
|
搜索推荐 算法 Python
如何实现归并排序算法? 要求:编写一个Python函数,输入一个无序列表,返回排序后的列表。
如何实现归并排序算法? 要求:编写一个Python函数,输入一个无序列表,返回排序后的列表。
|
11天前
【全网最简短代码】筛选出新数组中和旧数组的重复项,并和旧数组合并(往数组追加新的数据对象且去重,合并两个数组不重复数据)
【全网最简短代码】筛选出新数组中和旧数组的重复项,并和旧数组合并(往数组追加新的数据对象且去重,合并两个数组不重复数据)
|
4月前
判断两个不重复的list集合是否相等 只比较元素值 不比较顺序
判断两个不重复的list集合是否相等 只比较元素值 不比较顺序
22 0
|
5月前
442. 数组中重复的数据
442. 数组中重复的数据
|
5月前
|
C#
c#集合去重&排序常用方法
list和数组转Hashset跟SortedSet进行排序和去重,以及当Hashset和SortedSet存放的是类时如何进行自定义的排序和去重
46 2
|
9月前
|
JavaScript 前端开发 API
javascript遍历对象数组排序筛选需要的键值
javascript遍历对象数组排序筛选需要的键值
47 0
|
10月前
|
Python
13.从入门到精通:Python 集合 集合的基本操作 1、添加元素 2、移除元素 3、计算集合元素个数 4、清空集合 5、判断元素是否在集合中存在 集合内置方法完整列表
13.从入门到精通:Python 集合 集合的基本操作 1、添加元素 2、移除元素 3、计算集合元素个数 4、清空集合 5、判断元素是否在集合中存在 集合内置方法完整列表
|
11月前
|
JSON 数据格式 Python
一日一技:包含非hashable元素的列表如何去重并保持顺序?
一日一技:包含非hashable元素的列表如何去重并保持顺序?
82 0
|
机器学习/深度学习
合并集合--并查集()
给定一个包含 nn 个点(编号为 1∼n1∼n)的无向图,初始时图中没有边。 现在要进行 mm 个操作,操作共有三种: C a b,在点 aa 和点 bb 之间连一条边,aa 和 bb 可能相等; Q1 a b,询问点 aa 和点 bb 是否在同一个连通块中,aa 和 bb 可能相等; Q2 a,询问点 aa 所在连通块中点的数量;
63 0
Lambda 实战-两个不同的集合合并成一个新的集合
Lambda 实战-两个不同的集合合并成一个新的集合