gpt4 book ai didi

c# - 使用 LINQ 交错多个(超过 2 个)不规则列表

转载 作者:太空狗 更新时间:2023-10-29 20:03:20 25 4
gpt4 key购买 nike

假设我有以下数据

IEnumerable<IEnumerable<int>> items = new IEnumerable<int>[] { 
new int[] { 1, 2, 3, 4 },
new int[] { 5, 6 },
new int[] { 7, 8, 9 }
};

返回项目交错的平面列表的最简单方法是什么,以便我得到结果:

1, 5, 7, 2, 6, 8, 3, 9, 4

注意:内部列表的数量在运行时是未知的。

最佳答案

您所描述的本质上是一个 Transpose Method其中包括悬垂项目,结果为 flattened .这是我的尝试:

static IEnumerable<IEnumerable<T>> TransposeOverhanging<T>(
this IEnumerable<IEnumerable<T>> source)
{
var enumerators = source.Select(e => e.GetEnumerator()).ToArray();
try
{
T[] g;
do
{
yield return g = enumerators
.Where(e => e.MoveNext()).Select(e => e.Current).ToArray();
}
while (g.Any());
}
finally
{
Array.ForEach(enumerators, e => e.Dispose());
}
}

示例:

var result = items.TransposeOverhanging().SelectMany(g => g).ToList();
// result == { 1, 5, 7, 2, 6, 8, 3, 9, 4 }

关于c# - 使用 LINQ 交错多个(超过 2 个)不规则列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10974376/

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