【问题标题】:Union Dictionaries联合词典
【发布时间】:2012-10-08 12:14:06
【问题描述】:

我有两个Dictionary<Person,Boolean>。 dict a 包含:

Person A -> false
Person B -> true,
Person C -> false;

dict b 包含:

Person A -> true;
Person D -> false;

如果一个人在两个列表之一中包含一个真值,我想要一个结果,它包含一次所有的人,并将布尔值设置为真。

我如何用dict.Union() 解决这个问题?

谢谢小木

【问题讨论】:

  • "all Persons one time"是什么让你的人与众不同?
  • 是由散列键或一些自定义比较确定的相等性。如果是哈希,这是默认实现(语义上是 ref 比较,因此从值的角度来看,两个相同的对象仍然不同)还是您自己的实现?
  • 默认相等性是基于参考的,这在这里似乎已经足够了。

标签: c# linq dictionary


【解决方案1】:

听起来你可以使用:

var result = first.Union(second)
                  .GroupBy(x => x.Key)                // Group by dictionary keys
                  .ToDictionary(g => g.Key,           // Key for new dictionary
                                g => g.Any(p => p.Value)); // Any true values?

【讨论】:

  • Union 仅在 GetHashCodeEqualsPerson 中正确实现时有效。
  • @TimSchmelter:这些已经在字典中了,所以要么它已经工作,要么 OP 只是使用引用相等。
  • 谢谢,如果 Personclass 上的 GetHashCode() 运行良好... :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 2015-03-21
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
  • 1970-01-01
相关资源
最近更新 更多