C#如何通过一个属性比较两个列表并更改第一个列表的值

4

我有以下问题: 我有两个类型为foo的列表。 现在我想遍历这两个列表,因为在第二个列表中我更改了两个属性的值。 为了澄清我的意思,这是我知道可以工作的代码:

foreach(foo bar in list_1) {
  foreach(foo bar2 in list_2) {
    if (bar.ID == bar2.ID) {
      bar.name = bar2.name;
      bar.color = bar2.color;
    }
  }
}

如您所见,list_2中的属性值与list_1不同,但我也需要它们在list_1中。这样做是可行的,但我想知道是否有更简单的方法来实现这一点(也许使用LinQ?)

祝好, Asat0r


1
这个问题可能会在http://codereview.stackexchange.com上得到更好的回应。 - user1017882
在这种情况下,LINQ会非常有用。请查看此链接https://dev59.com/zmQm5IYBdhLWcg3w0Bm5 - Mainak
3
更容易-不行,更快-可以。 - Ivan Stoev
在列表中,ID 是唯一的吗? - Dmitry Bychenko
@Mainak:我尝试了这个解决方案,但是在这种情况下无法正确地使其工作。虽然Dmitry Bychenko的答案对我来说很好用。不管怎样,还是谢谢你 :) - Asat0r
1个回答

1
如果IDlist_2中是唯一的,您可以通过将list转换为dictionary来获得更快的实现(适用于大型列表)。
  // A little bit of Linq: ToDictionary 
  var dict = list_2.ToDictionary(item => item.ID, item => item);
  ...
  foreach (item in list_1) {
    foo master;

    if (dict.TryGetValue(item.ID, out master)) {
      item.name = master.name; 
      item.color = master.color;
    }
  }

是的,我忘了提到ID在两个列表中都是唯一的 :) 谢谢,这个答案正是我在寻找的,因为我试图避免使用封装的for或foreach循环。 - Asat0r

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接