gpt4 book ai didi

c# - 扁平化枚举中的 Linq 组数据

转载 作者:太空狗 更新时间:2023-10-30 00:38:22 25 4
gpt4 key购买 nike

Period|1|
AA|0|0|32.39|0|0|-0.12|
BB|0|-1794.62|
CC|Entity1|25|31.48|244.1|
DD|Entity2|25|0|0|
Period|2|
AA|0|0|32.39|0|0|-0.12|
BB|0|-1794.62|
CC|Entity1|25|31.48|244.1|
EE|Entity2|25|0|0|
FF|Entity3|25|0|0|
GG|Entity4|25|0|0|
HH|Entity5|25|0|0|
Period|3|
AA|0|0|32.39|0|0|-0.12|
BB|0|-1794.62|

将上述集合视为:

IEnumerable<IEnumerable<string>> data;

第一个可枚举的是每一行。第二个 Enumerable 是由分隔符分隔的每一行 |

我想按每个时期分组:

预期结果:

Period1 (Group Key)
AA|0|0|32.39|0|0|-0.12|
BB|0|-1794.62|
CC|Entity1|25|31.48|244.1|
DD|Entity2|25|0|0|
Period2 (Group Key)
AA|0|0|32.39|0|0|-0.12|
BB|0|-1794.62|
CC|Entity1|25|31.48|244.1|
EE|Entity2|25|0|0|
FF|Entity3|25|0|0|
GG|Entity4|25|0|0|
HH|Entity5|25|0|0|
Period3 (Group Key)
AA|0|0|32.39|0|0|-0.12|
BB|0|-1794.62|

当前实现:

foreach (var dataPerPeriod in data.Take(5))
{
yield return new DataPerPeriod(dataPerPeriod);
}

但如您所见,只有第一个句点有 5 个元素,包括可能的关键元素(句点)。

因此我不明白如何解决这个问题。

最佳答案

我已经为您的 DataPeriod 制作了帮助类:

public class DataPerPeriod
{
public string Name { get; set; }
public List<IEnumerable<string>> Lines { get; set;}
}

我可以用这个查询聚合它:

var res = data.Aggregate(new List<DataPerPeriod>(), (a, b) =>
{
if (b.First() =="Period")
{
a.Add(new DataPerPeriod { Name = String.Join("", b),
Lines = new List<IEnumerable<string>>() });
}
else
{
a.Last().Lines.Add(b);
}
return a;
});

结果是:

enter image description here

关于c# - 扁平化枚举中的 Linq 组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41853886/

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