一个爬虫抓取支付数据项目。
抓取的某天的数据List<String> transactionInfoDetail中,去数据库中读取某天已经抓取的数据List<String> dbTransactionDetails。两者做比较IEnumerable<string> diffTransactionLt = transactionInfoDetail.Except(dbTransactionDetails),如果数据不同,就做一次更新。
现在出现的bug是,transactionInfoDetail会出现一模一样的重复数据。当Except的时候,重复的数据就会过滤掉。
我的思路是,把transactionInfoDetail中数据减去dbTransactionDetails中的数据?比如a=(1,2,2,2,4,4,5),b=(1,2,4,5),a-b=(2,2,4),再把(2,2,4)写进去,但是用代码来实现怎么实现呢?
或者查出transactionInfoDetail中重复数据,如上的示例,a的重复数据是(2,4),b没有重复数据,把(2,4)写入数据库中。
由于我对C#这门语言的api不太熟,看了半天的文档也找不到思路,请问各位,如何来实现这样的需求?
------解决思路----------------------
为什么不用 Dictionary<> 来做 简单又方便
Dictionary<string,byte> dic_a = new ....
Dictionary<string,byte> dic_b = new ...
//我经常这样做 那个byte 是随便用来占位的
foreach(var v in dic_b.Keys){
if(dic_a.ContainsKey(v)) dic_a.Remove(v);//就是你说的减法
}
------解决思路----------------------
不知道你想要的什么.
1.比如a=(1,2,2,2,4,4,5),b=(1,2,4,5),a-b=(2,2,4),再把(2,2,4)写进去,但是用代码来实现怎么实现呢?
List<string> a = new List<string>(){"1","2","2","2","4","4","5"};
List<string> b = new List<string>(){"1","2","4","5"};
for(int i = 0;i < a.Count;i++)
{
int index = b.IndexOf(a[i]);
if(index > -1)
{
a.RemoveAt(i);
b.RemoveAt(index);
i--;
}
}
2.查出transactionInfoDetail中重复数据,如上的示例,a的重复数据是(2,4),b没有重复数据,把(2,4)写入数据库中。
List<string> a = new List<string>(){"1","2","2","2","4","4","5"};
var list = a.Where(x => a.IndexOf(x) != a.LastIndexOf(x)).Distinct().ToList();
------解决思路----------------------
List<int> a = new List<int>() { 1, 2, 2, 2,6, 4, 5 };
List<int> b = new List<int>() { 1,2,4,5 };
//查询a中的重复项。
var q = from data in a
group data by data into g
where g.Count() > 1
select g.Key;
//获取a和b的差集,并且加上a中的重复项
var result = a.Except(b).Union(q);
foreach (var item in result)
{
Console.WriteLine("Key:"+item);
}