9

我有两个 ILookup 类型的变量。我想使用 Union 或 Concat 组合它们的值并将结果分配给相同类型的第三个变量。Union 和 Concat 都返回 IGrouping。将 IGrouping 转换为 ILookup 一定很简单,但我就是做不到!!!:-( IGrouping 只公开了密钥,所以我在查找的第二个参数上苦苦挣扎......任何帮助都将非常非常感激。

4

1 回答 1

12

我认为您需要先展平序列,才能使用ToLookup

var lookup = first.Concat(second)
                  .SelectMany(group => group,
                              (group, item) => new { Key = group.Key, 
                                                     Item = item })
                  .ToLookup(x => x.Key, x => x.Item);

它使用的形式SelectMany接受两个委托:一个将原始序列中的项目转换为集合,另一个将原始集合(即组)中的项目和返回集合中的项目(即匹配的项目该组的密钥)以获取结果项。这是使用键将分组扁平化为一系列项目的最简单方法(我认为!)。

以上未经测试,因此可能完全错误。它也相对效率低下......遗憾的是没有办法Lookup直接构建实例。当然,您可以ILookup自己实现。

于 2009-09-27T07:36:14.453 回答