如何使用LINQ从列表中选择不同长度的节

本文关键字:选择 LINQ 何使用 列表 | 更新日期: 2023-09-27 18:19:25

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

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

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

示例:

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

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来完成此操作?

如何使用LINQ从列表中选择不同长度的节

使用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还提供了拆分扩展方法:

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

将打印相同的

尝试这种方式

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

希望这会有所帮助。