简体   繁体   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?

I have an array of struct _LOC of array of struct _FAC of array of values!!!我有一个结构 _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; 
  }

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

Each _m_Locs[i]._facs[j] has 21 integer values!每个 _m_Locs[i]._facs[j] 有 21 个 integer 值!

Now, I want to have flat linear results --现在,我想要得到平坦的线性结果——

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

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

There are two solutions:有两种解决方案:

  1. Chained SelectMany's;链式 SelectMany 的; That is, selectMany(x=>xy).SelectMany(xy=>xy.zz)即 selectMany(x=>xy).SelectMany(xy=>xy.zz)
  2. Nested SelectMany's;嵌套的 SelectMany; That is, Select Many(x=>xySelectMany(y=>y.values)),即Select Many(x=>xySelectMany(y=>y.values)),

In this case, the Nested SelectMany solution is:在这种情况下,嵌套 SelectMany 解决方案是:

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

Or, you can also use Chained SelectMany:或者,您也可以使用链式 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 });

Since they both yield same result, I prefer the simpler one which is the Nested SelectMany!由于它们都产生相同的结果,我更喜欢更简单的嵌套 SelectMany!

Enjoy!享受!

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

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