代码之家  ›  专栏  ›  技术社区  ›  McKenzieG1

用LINQ在标记元素处拆分列表?

  •  3
  • McKenzieG1  · 技术社区  · 15 年前

    我有一个 List<T> 这是“常规”元素和“标记”元素的混合。我想把它分成 List<List<T>> 在标记处断裂。

    例如,给定输入a、b、m、c、d、e、f、m、g,其中“m”是标记元素,我想得到a、b、c、d、e、f、g

    用一个循环来完成这项工作是很容易的,但似乎可以用LINQ更简洁地表达它,并且经过一点头疼之后,我就是看不到它是如何实现的。(我想林福不够。)

    2 回复  |  直到 15 年前
        1
  •  5
  •   KeithS    15 年前

    varSplitList = myList.Aggregate(new List<List<T>>{new List<T>()}, 
       (sl,t)=> {
          if(/*T is a marker element*/) sl.Add(new List<T>());
          else sl.Last().Add(t); 
          return sl;
       });
    

    long fact = Enumerable.Range(1,n).Aggregate(1, (f,n)=>f*n));

    fact

        2
  •  2
  •   Michael Kropat    15 年前

    var list = new List<char> {'a', 'b', 'M', 'c', 'd', 'e', 'f', 'M', 'g'};
    const char marker = 'M';
    
    var markerIndexes = list.Select((c, i) => new { c, i }).Where(z => z.c == marker).Select(z => z.i);
    var split = from z in list.Select((c, i) => new { c, i })
                where z.c != marker
                group z.c by markerIndexes.Count(mi => z.i > mi) into g
                select g.ToList();
    return split.ToList();
    
    推荐文章