-10

我有一个列表(它可能是一个复杂类型的列表,但为了更好地解释我将使用字符串)。

编辑:请不要为我提供拆分方法解决方案。它们完全没用。我有一个复杂类型的列表,字符串只是简化

有一些重复的元素表示新部分的开始。每个部分可能有不同的长度。

例子:

(在我真正的问题中 - 每个字符串都是复杂类型的一部分)

class Complex
{
  public string Header { get; set; }
  ...
  ...
  ...
}

开始 1 2 3 4 5 6 7 开始 1 2 3 开始 1 2 3 4 5 6 开始 1 开始 1 2

我想使用 LINQ 获取所有可能的列表。我是说

  • 1 2 3 4 5 6 7
  • 1 2 3
  • 1 2 3 4 5 6
  • 1
  • 1 2

如何仅使用 LINQ 来做到这一点?

4

2 回答 2

4

使用GroupAdjacent方法,提供我的MoreLinq

var strings = new []{"start","1","2","3","4","5","6","7",
                     "start","1","2","3",
                     "start","1","2","3","4","5","6",
                     "start","1",
                     "start","1","2"};

strings.GroupAdjacent(v => v != "start")
       .Where(grp => grp.Key) //skip "start" items
       .ForEach(groupItems => Console.WriteLine(string.Join(" ", groupItems)));

印刷:

1 2 3 4 5 6 7
1 2 3
1 2 3 4 5 6
1
1 2

MoreLinq 还提供了Split扩展方法:

strings.Split("start")
       .Where(grp => grp.Any()) //skip first item as empty collection 
       .ForEach(groupItems => Console.WriteLine(string.Join(" ", groupItems)));

将打印相同的

于 2013-06-21T10:34:25.920 回答
0

试试这个方法

YourList.Split('start').ToList();

希望这会有所帮助。

于 2013-06-21T10:37:20.893 回答