繁体   English   中英

LINQ:如何使用单行链式 SelectMany 或嵌套式 SelectMany 将结构结构展平为一个线性结果?

[英]LINQ: How to use a one-line Chained SelectMany or a Nested SelectMany to flatten struct of structures into one linear result?

我有一个结构 _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 个 integer 值!

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

List<string, string, int> 从迭代 _m_Locs 到 i,j,k's

到 output(_loc[i].key、_loc[i]._fac[j].key、_loc[i]._fac[j]._vals[k])。

有两种解决方案:

  1. 链式 SelectMany 的; 即 selectMany(x=>xy).SelectMany(xy=>xy.zz)
  2. 嵌套的 SelectMany; 即Select Many(x=>xySelectMany(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 }));

或者,您也可以使用链式 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!

享受!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM