如何使用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来完成此操作?
使用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();
希望这会有所帮助。