【问题标题】:C# compare two Lists by one Property and change value of first ListC#通过一个属性比较两个列表并更改第一个列表的值
【发布时间】:2016-07-14 08:49:58
【问题描述】:

我有以下问题: 我有两个 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

【问题讨论】:

  • 这可能会在codereview.stackexchange.com上得到更好的接受
  • LINQ 在这种情况下会非常有用。看看这个stackoverflow.com/questions/17323804/…
  • 更简单 - 不。更快 - 当然。
  • ID 在列表中是唯一的吗?
  • @Mainak:我尝试了这个解决方案,但无法让它在这种情况下正常工作。尽管 Dmitry Bychenko 的回答对我来说效果很好。不过还是谢谢你:)

标签: c# visual-studio linq logic


【解决方案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-循环。跨度>
猜你喜欢
  • 2013-06-23
  • 2019-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多