【问题标题】:LINQ Convert from IGrouping to LookupLINQ 从 IGrouping 转换为 Lookup
【发布时间】:2023-03-22 00:32:01
【问题描述】:

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

【问题讨论】:

    标签: linq lambda igrouping ilookup


    【解决方案1】:

    我认为您需要先展平序列,才能使用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

    【讨论】:

      猜你喜欢
      • 2015-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      相关资源
      最近更新 更多