c# – 使用Linq将数据分区为数组

c# – 使用Linq将数据分区为数组,第1张

概述我有一个元素数组,其中元素具有Flagged布尔值. 1 flagged2 not flagged3 not flagged4 flagged5 not flagged6 not flagged7 not flagged8 flagged9 not flagged 我想根据标记的指标将其分解为数组 输出> array 1 {1,2,3}array 2 {4,5,6,7}arra 我有一个元素数组,其中元素具有Flagged布尔值.
1 flagged2 not flagged3 not flagged4 flagged5 not flagged6 not flagged7 not flagged8 flagged9 not flagged

我想根据标记的指标将其分解为数组

输出>

array 1 {1,2,3}array 2 {4,5,6,7}array 3 {8,9}
解决方法@H_502_13@ linq没有这方面的 *** 作符,但我编写了一个你可以使用的扩展方法(在提交到 MoreLinq的过程中,你也应该检查):

使用下面的运算符,你会写:

var result =    items.Segment( (item,prevItem,IDx) => item.Flagged )        .Select( seq => seq.ToArray() )  // converts each sequence to an array        .ToList();

这是扩展方法的代码:

public static IEnumerable<IEnumerable<T>> Segment<T>(IEnumerable<T> sequence,Func<T,T,int,bool> newSegmentIDentifIEr)      {          var index = -1;          using (var iter = sequence.GetEnumerator())          {              var segment = new List<T>();              var prevItem = default(T);              // ensure that the first item is always part              // of the first segment. This is an intentional              // behavior. Segmentation always begins with              // the second element in the sequence.              if (iter.MoveNext())              {                  ++index;                  segment.Add(iter.Current);                  prevItem = iter.Current;              }              while (iter.MoveNext())              {                  ++index;                  // check if the item represents the start of a new segment                  var isNewSegment = newSegmentIDentifIEr(iter.Current,index);                  prevItem = iter.Current;                  if (!isNewSegment)                  {                      // if not a new segment,append and continue                      segment.Add(iter.Current);                      continue;                  }                  yIEld return segment; // yIEld the completed segment                  // start a new segment...                  segment = new List<T> { iter.Current };              }              // handle the case of the sequence ending before new segment is detected              if (segment.Count > 0)                  yIEld return segment;          }      }
总结

以上是内存溢出为你收集整理的c# – 使用Linq将数据分区为数组全部内容,希望文章能够帮你解决c# – 使用Linq将数据分区为数组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1239034.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存