Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中比较两个列表中的重复项#_C# - Fatal编程技术网

C# 在C中比较两个列表中的重复项#

C# 在C中比较两个列表中的重复项#,c#,C#,我有两张这样的清单: List<EmpData> colExistingEmpData; List<EmpData> colExternalEmpData; 当colExistingEmpData没有“Id”的重复值时,这可以正常工作 当colExternalEmpData中存在重复项时,这意味着如果两名员工的“ID”与123相同,则上述代码仍会将具有123 ID的现有员工标记为更新,因为如果colExistingEmpData仅具有一个具有该ID的reocrd,则它会

我有两张这样的清单:

List<EmpData> colExistingEmpData;
List<EmpData> colExternalEmpData;
当colExistingEmpData没有“Id”的重复值时,这可以正常工作

当colExternalEmpData中存在重复项时,这意味着如果两名员工的“ID”与123相同,则上述代码仍会将具有123 ID的现有员工标记为更新,因为如果colExistingEmpData仅具有一个具有该ID的reocrd,则它会在colExistingEmpData中找到精确匹配项

有没有一种方法可以让员工记录在任何一个源中重复时标记为“忽略”

我不能使用Dictionary对象,我以前使用过它,但是powers不喜欢这个想法


注意。

考虑在等式中添加一个已处理列表:

List<int> processed = new List<int>();

因此,在检查另一个列表之前,请执行该操作。这是您要做的第一件事,因为您并不真正关心它是否已被处理。

我不知道这是否有帮助,但为什么不合并这两个列表并删除重复项:-

var mergedList = list1.Union(list2).ToList();
您应该查看以下问题:-


假设我正确理解您的问题,您可以始终按照employeeID对外部列表进行排序,然后使用while循环,在id相同时跳过employees,而不是使用Foreach循环

这是+-代码的外观,简化为整数:

List<int> external = new List<int>() { 1, 2, 2, 5, 1, 3 };
List<int> internalList = new List<int>() { 1, 4, 5, 3 };
external.Sort();
int index = 0;
int item = -1;
while (index < external.Count)
{
    if (external[index] != item)
    {
       item = external[index];
       internalList.FindAll(t => t == item);
    }
    index++;
 }
List external=newlist(){1,2,2,5,1,3};
List internalList=newlist(){1,4,5,3};
external.Sort();
int指数=0;
int项=-1;
while(索引<外部计数)
{
if(外部[索引]!=项目)
{
项目=外部[索引];
FindAll(t=>t==item);
}
索引++;
}

另一种方法是重写
Equals
GetHashCode
并使用
.Distinct()


你说的“标记为忽略”是什么意思?为什么不能有一个包含所有重复ID的哈希集?此外,您的查询将在此处运行两次。使用ToList仅运行一次;)这是你的密码吗
FindAll
返回一个列表,而不是一个整数,不是吗?我以前用过它,但是powers不喜欢这个主意。我必须承认这是一件新鲜事。你的同龄人喜欢应用程序速度慢且挂起吗?在这种情况下,字典将产生最快的结果(至少是渐进的)。@Groo你在为我的同龄人使用slow和hanging这个词时非常慷慨,他们更喜欢发出行进命令。@Groo,我必须说我知道他来自哪里。我不知道你是否曾经在一个非常大的组织中工作过,但无论如何,有些事情是不允许的。这些事情通常没有意义,实际上更多的是一些人炫耀他们在组织中的地位,而不是其他任何事情。他们不明白这一点——所以他们撤销了它——这让他们感觉更强大、更糟糕。大组织政治——就是这样。这相当于继续;在他最后的几年里。我想他是出于某种原因想要标记重复项,而不仅仅是跳过它们。@Evelie,问题是该员工在第一个列表中出现了两次,其中一个列表正在迭代。本质上,OP需要知道如何逐行处理它。加入这两个列表,虽然可以消除重复项,但并不能真正解决需要知道如何根据第二个列表中的行来处理每一行。我花了5次尝试来理解这个问题,哈哈,我接受你的观点,你的正确。
var mergedList = list1.Union(list2).ToList();
List<int> external = new List<int>() { 1, 2, 2, 5, 1, 3 };
List<int> internalList = new List<int>() { 1, 4, 5, 3 };
external.Sort();
int index = 0;
int item = -1;
while (index < external.Count)
{
    if (external[index] != item)
    {
       item = external[index];
       internalList.FindAll(t => t == item);
    }
    index++;
 }