当前位置: 代码迷 >> C# >> List<string>数据怎么比较和检索重复值
  详细解决方案

List<string>数据怎么比较和检索重复值

热度:492   发布时间:2016-04-28 08:32:54.0
List<string>数据如何比较和检索重复值?
一个爬虫抓取支付数据项目。
抓取的某天的数据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);
            }
  相关解决方案