【问题标题】:LINQ: How to use a one-line Chained SelectMany or a Nested SelectMany to flatten struct of structures into one linear result?LINQ:如何使用单行链式 SelectMany 或嵌套式 SelectMany 将结构结构展平为一个线性结果?
【发布时间】:2021-03-31 14:06:13
【问题描述】:

我有一个结构 _LOC 的数组,结构 _FAC 的值数组!!!

  private static List<_LOC> _m_Locs { get; set; }
  private struct _LOC {
     public string key;
     public List<_FAC> _facs;
  }
  private struct _FAC      {
     public string key;
     public List<int> _vals; 
  }

我的 _m_Locs[i].key 可以包含任何这些==> string[]{"AA", "BB", "CC"};
我的 _m_Locs[i]._facs[j].key 可以包含任何这些==> string[]{"F1", "F2", "F3"}。

每个 _m_Locs[i]._facs[j] 有 21 个整数值!

现在,我想要得到平坦的线性结果 --

List 从迭代 _m_Locs 到 i,j,k's

输出 (_loc[i].key, _loc[i]._fac[j].key, _loc[i]._fac[j]._vals[k])。

【问题讨论】:

    标签: c# linq select one-to-many


    【解决方案1】:

    有两种解决方案:

    1. 链式 SelectMany 的;即selectMany(x=>x.y).SelectMany(xy=>xy.zz)
    2. 嵌套的 SelectMany;即多选(x=>x.y.SelectMany(y=>y.values)),

    在这种情况下,嵌套 SelectMany 解决方案是:

    var soln1 = _m_Locs
               .SelectMany(
                lcn => lcn._facs.SelectMany(
                ff => ff._vals, (ff, vv) => new { loc=lcn.key, fac=ff.key, value=vv }));
    

    或者,您也可以使用 Chained SelectMany:

     var soln2 = _m_Locs
    .SelectMany(lcn => lcn._facs, (lcn, FF) => new { aLoc = LL.key, aFac = FF.key, vals = FF._vals })
    .SelectMany(FF => FF.vals, (FF, nVal) => new { loc = FF.aLoc, fac = FF.aFac, value = nVal });
    

    由于它们都产生相同的结果,我更喜欢更简单的嵌套 SelectMany!

    享受吧!

    【讨论】:

      猜你喜欢
      • 2014-05-24
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多