C# list集合去重

时间:2022-09-03 18:49:32

list集合中有重复数据 ,比如此数据如下

list[1]   ‘北京市’ ,1,11

list[2]   '北京市',2,12

list[3]  '北京市', 3,13

list[4] '上海市',2,15


list里边就是装的这样的数据。

匹配的Model为:

string        int      int

address,type, number

省市,类型,数量

现在想把数据归类为

地址  类型1 类型2 类型3

北京   11      12        13

上海    0       15          0


思路:首先就要对地区进行筛选去重

             然后迭代唯一地区字符串,组合不同类型的数量

如何进行筛选去重?

使用拉姆达表达式。把list集合看做一张表,拉姆达就是相当sql语句一般,对这张表进行操作。

定义一个新的Model进行新的数据格式匹配

string        int                         int                  int

address,type1number , type2number,type3number

定义一个新的List<newModel>的集合,好接受新表格式

 List<newModel>  newData = new List<newModel>();

  //1.去重地区名字,datalist为原来有重复地区的list集合

   List<string> addresses = dataList.Select(m => m.address.Trim()).Distinct().ToList();  //跟sql数据库中distinct关键词一样对应。去重select语句

  // 2. 迭代唯一地区字符串,组合不同类型招聘的数量
                foreach (string addr in addresses)
                {
                   newModel data = new newModel();
                    {
                           address = addr
                    };

                     data.fType1number = dataList.Where(m => (m.address.Trim() == addr && m.type == 0)).Sum(m => m.number); 
                     data.fType2number = dataList.Where(m => m.address.Trim() == addr && m.type == 1).Sum(m => m.number);
                     data.fType3number = dataList.Where(m => m.address.Trim() == addr && m.type == 2).Sum(m => m.number);

                    //跟sql数据库中where条件查询对应,然后这里返回的是一个list集合,所以进行sum函数加总,即使这种返回的list集合只有一列,但如果这一列为空的话,此时没用sum函数或者使用的FirstOrDefault,则会报空。此处使用sum函数就是预防不报空,直接加总为0.

                     newData.Add(data);  //置入新的集合
                }

此时的newData这个list集合已经去重变成自己想要的数据格式列表了。