.net core强大的列表对比取数

将一个list的中的所有数据在另一个list中找出,并将找到的数据生成一个新的list。

背景:

有一个大的字符串类型的list Alllist,中包含可营销的数据和不可营销的数据,共八千万条

另一个字符串list CanMarkelist中包含不可营销的数据,共三千万条

现在要将可营销的数据生成一个list,将不可营销的数据也生成一个list

这种情况下,使用for循环去Array.IndexOf(CanMarkelist, all)的话性能将大量消耗。所以可以使用:

IntersectBy:取两个字符串的交集

ExceptBy:取两个字符串的差集

这样能快速取出所有数据。

我的开发需求是:

读取两个文件,一个是所有数据文件(内容包含手机号),一个是可营销的数据文件(加过密的手机号md5串),对比两个文件,将可营销的数据和不可营销的手机号数据分别生成两个文件。

因为所有数据文件中包含了可营销的数据,所以可营销的数据是加过密的也没关系,所有数据文件中有解了密的手机号。

我的代码:

csharp 复制代码
//
var canMarke= File.ReadAllLines("D:\\数据文件\\AllData.txt").ToHashSet();//可营销的md5文件
var allData= File.ReadAllLines("D:\\数据文件\\canMarket.txt");//所有数据的手机号文件

//将所有数据去重,然后转成字典类型,将手机号转成md5作为key,将手机号作为value
var allDataToMD5= allData.Distinct().ToDictionary(x => EncryptExtension.ToMd532String(x, OutputMode.LowerHex));

//可营销的数据 
//取可营销的md5和所有数据的字典的key作比较取交集的value,则为可营销数据的手机号
var canMarketing = allDataToMD5.IntersectBy(canMarke, x => x.Key).Select(x => x.Value).ToList();
//取可营销的md5和所有数据的字典的key作比较取差集的value,则为不可营销数据的手机号
var nitCanMarketing = allDataToMD5.ExceptBy(canMarke, x => x.Key).Select(x => x.Value).ToList();

// 将匹配的行写入到新文件中
File.WriteAllLines("D:\\数据文件\\keYinXiao.txt", canMarketing);
File.WriteAllLines("D:\\数据文件\\buKeYinXiao.txt", nitCanMarketing);
相关推荐
未来之窗软件服务8 小时前
C# 截图源码支持自动保存-东方仙盟
c#·仙盟创梦ide·东方仙盟·电脑工具
UIU11420 小时前
-7 / 2 在 C 里是 -3,在 Python 里是 -4,谁算错了?
c++·学习·c#
wflynn1 天前
GitHub 今日推荐|REDox:64 位 token 表示结构化数据,内存占用降 70% 支持多格式互转
开源·c#·github
驰骋工作流1 天前
C#/.NET 开源BPM工作流引擎6大常用对比选型分析驰骋BPM驰骋低代码低代码工作流引擎
开源·c#·.net
en.en..1 天前
C语言 fp与fd 区别详解
c#
淡海水2 天前
02-02-原理篇-分代GC
算法·unity·c#·游戏引擎·.net·gc
BD_Marathon2 天前
多轮对话聊天机器人
开发语言·机器人·c#
czhc11400756632 天前
设备标定页防呆为何失效:草稿与真值的错位
c#
周杰伦fans2 天前
轻量模型高并发推理优化技巧
开发语言·人工智能·c#
周杰伦fans2 天前
C#对话摘要降低Token消耗
人工智能·后端·c#