您的位置:首页 > 编程语言 > C#

C#比较两个数组的不同

2015-07-14 14:48 676 查看
先描述需求: 表A中有个字段S内容是用逗号分隔开的,里边存的是表B的ID。当在修改A中数据的时候就需要修改S的内容这时候因为B表是在另一个库中存在的,如果直接全部删除旧的然后全部添加新的会影响效率,所以要先区别出不同的做处理,然后再操作数据库。

public static void Compare(string[] arrFirst, string[] arrSecond, out List<string> lstAdd,out List<string> LstRemove)
{
lstAdd = new List<string>();
LstRemove = new List<string>();
if (arrFirst.Length <= 0 && arrSecond.Length <= 0)
{
lstAdd = null;
LstRemove = null;
}
//添加
if (arrFirst.Length <= 0)
lstAdd = arrSecond.ToList();
//删除
if(arrSecond.Length<=0)
LstRemove = arrFirst.ToList();

for (int i = 0; i < arrFirst.Length; i++)
{
//if (arrSecond.Where(x => x == arrFirst[i]) == null)
if(!arrSecond.Contains(arrFirst[i]))
LstRemove.Add(arrFirst[i]);
}
for (int i = 0; i < arrSecond.Length; i++)
{
if (!arrFirst.Contains(arrSecond[i]))
lstAdd.Add(arrSecond[i]);
}
//去重
LstRemove.Distinct();
lstAdd.Distinct();

}


最后调用测试

static void Main(string[] args)
{

Console.WriteLine("-----请输入第一个数------");
var strFirst = Console.ReadLine();

Console.WriteLine("-----请输入第二个数------");
var strSecond = Console.ReadLine();

var arrFirst = strFirst.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
var arrSecond = strSecond.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);

List<string> lstAdd; List<string> LstRemove;

Compare(arrFirst, arrSecond, out lstAdd, out LstRemove);

if (lstAdd != null)
{
foreach (var item in lstAdd)
{
Console.WriteLine("要添加的ID有{0}", item);
}
}
if (LstRemove != null)
{
foreach (var item in LstRemove)
{
Console.WriteLine("要删除的ID有{0}",item);
}
}

Console.ReadKey();

}


结果



欢迎加技术讨论群169767436 大家共同交流进步。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C#比较两个数组