gpt4 book ai didi

c# - LINQ 按某种规则将 List> 合并为一个 IEnumerable

转载 作者:太空狗 更新时间:2023-10-29 19:59:29 33 4
gpt4 key购买 nike

假设我有一个 List<IEnumerable<double>>包含可变数量的双数无限来源。假设它们都是波发生器函数,我需要将它们叠加到一个由 IEnumerable<double> 表示的波发生器中。只需从每个数字中取出下一个数字并将它们相加即可。

我知道我可以通过迭代器方法来做到这一点,就像这样:

    public IEnumerable<double> Generator(List<IEnumerable<double>> wfuncs)
{
var funcs = from wfunc in wfuncs
select wfunc.GetEnumerator();

while(true)
{
yield return funcs.Sum(s => s.Current);
foreach (var i in funcs) i.MoveNext();
}
}

然而,它似乎相当“行人”。是否有类似 LINQ 的方法来实现此目的?

最佳答案

您可以在 IEnumerables 上聚合 Zip 方法。

    public IEnumerable<double> Generator(List<IEnumerable<double>> wfuncs)
{
return wfuncs.Aggregate((func, next) => func.Zip(next, (d, dnext) => d + dnext));
}

这基本上是一遍又一遍地应用相同的 Zip 方法。使用四个 IEnumerables 这将扩展为:

wfuncs[0].Zip(wfuncs[1], (d, dnext) => d + dnext)
.Zip(wfuncs[2], (d, dnext) => d + dnext)
.Zip(wfuncs[3], (d, dnext) => d + dnext);

尝试一下:fiddle

关于c# - LINQ 按某种规则将 List<IEnumerable<T>> 合并为一个 IEnumerable<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33608867/

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