gpt4 book ai didi

c# - 林克/C# : How to split List into variable length chunks based on list item information?

转载 作者:行者123 更新时间:2023-11-30 19:59:47 29 4
gpt4 key购买 nike

我正在尝试拆分 Record 类型的列表在 Linq 中根据某些 Type 进入子列表信息。每组记录前总有一个类型为“a”的记录,后有一个类型为“b”的记录。我有一个类Record :

class Record
{
public string Type { get; set; }
public string SomeOtherInformation { get; set; }
}

这是一个示例列表 ( List<Record> records ):

Type    SomeOtherInformation
a ......
x ......
x ......
b ......
a ......
b ......
a ......
x ......
x ......
x ......
x ......
x ......
b ......

期望的输出是(List<List<Record>> lists):

List #1:        List #2:        List #3:
a ...... a ...... a ......
x ...... b ...... x ......
x ...... x ......
b ...... x ......
x ......
x ......
b ......

我目前正在使用 for 循环遍历此列表,并在类型为“a”时创建一个新列表,并在项目类型为“b”时将其添加到子列表列表。我想知道 Linq 是否有更好的方法来解决这个问题。这可以用 Linq 完成吗?如果可以,怎么做?

最佳答案

据我所知,您不能干净地使用普通的 LINQ 执行此操作。 LINQ 中的流式运算符依赖于您能够根据仅那个项目来对项目做出决定(例如,是否过滤它、如何投影它、如何对其进行分组),并且可能是它在原始来源中的索引。在您的情况下,您确实需要比这更多的信息 - 您需要知道您已经看到了多少 b 项目。

可以这样做:

int bs = 0;
var groups = records.GroupBy(item => item.Type == 'b' ? bs++ : bs,
(key, group) => group.ToList())
.ToList();

但是,这依赖于 b++ 在分组投影中的副作用(以跟踪我们有多少 b 项)已经看过)- 它绝对不是惯用的 LINQ,我不推荐它。

关于c# - 林克/C# : How to split List into variable length chunks based on list item information?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23023701/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com