使用不同的对象迭代两个列表

时间:2017-11-04 13:00:51

标签: c#

我正在尝试使用不同的对象迭代两个列表。如果我在比较listTest1listTest2

时完成以下条件,我会将记录添加到第三个列表
  • 如果abbrvdate相同,我会将对象从listTest2添加到listTest3
  • 如果abbrv相同但date不同,我会将对象从listTest2添加到listTest3,我将已完成的属性切换为{{1 }}。此外,我正在将记录从true添加到listTest1
  • 如果listTest3中不存在abbrv listTest1,我会将listTest2的记录添加到listTest1

我知道这听起来很混乱,这就是为什么我会告诉你我会得到什么以及我期待什么。

我得到了:

My image

我需要获取所有这些记录,但重复(Test2)。

listTest3

1 个答案:

答案 0 :(得分:2)

您正确实现了前两个条件,但第三个条件无法在最里面的循环中实现:您无法判断abbrvlistTest1是否存在listTest2,直到您的内循环为止结束了。

添加bool变量abbrvFound,表示找到了abbrv。在进入嵌套循环之前将其设置为false;如果找到匹配项,请将其设置为true

循环结束后,请检查abbrvFound以确定是否需要添加listTest1对象。

for (int i = 0; i < listTest1.Count; i++) {
    bool abbrvFound = false;
    for (int a = 0; a < listTest2.Count; a++) {
        if (listTest1[i].abbrv != listTest2[a].abbrv)
            continue;
        abbrvFound = true;
        if (listTest1[i].date == listTest2[a].date) {
            listTest3.Add(listTest2[a]);
        } else {
            listTest3.Add(new Test.Test2() { abbrv = listTest2[a].abbrv, date = listTest2[a].date, completed = true, abbrevName = listTest2[a].abbrevName });
            listTest3.Add(new Test.Test2() { abbrv = listTest1[i].abbrv, date = listTest1[i].date, completed = listTest1[i].completed, abbrevName = string.Empty });
        }
    }
    if (!abbrvFound) {
        listTest3.Add(new Test.Test2() { abbrv = listTest1[i].abbrv, date = listTest1[i].date, completed = listTest1[i].completed, abbrevName = string.Empty });
    }
}