gpt4 book ai didi

c# - 使用 LINQ 将列表转换为列表的列表

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

我有一个值列表:

IList<V> values = { V1, V2, V3, V4, V5, V6, V7 };

我想将列表转换为列表的列表,其中每个子列表都是指定的大小。每个子列表的大小可能不同。例如:

IList<IList<V>> values_size2 = { { V1, V2 }, { V3, V4 }, { V5, V6 }, { V7 } };
IList<IList<V>> values_size3 = { { V1, V2, V3 }, { V4, V5, V6 }, { V7 } };
IList<IList<V>> values_size4 = { { V1, V2, V3, V4 }, { V5, V6, V7 } };

我可能可以使用嵌套循环很容易地做到这一点,但想知道是否有使用 LINQ 来做到这一点的聪明方法?

我最初的想法是使用 Aggregate方法不知何故,但没有马上想到。

谢谢。

最佳答案

这是一个通用的 IEnumerable基于 Batch功能。您可以将返回类型从 IEnumerable<IEnumerable<T>> 更改为至 IEnumerable<IList<T>>没有其他更改(因为在我的实现中它已经是一个列表。要更改整个内容以返回列表列表,您需要对结果调用 `ToList,或进行更复杂的重构。

请注意,从技术上讲,这并没有使用 LINQ,它只是创建了一种新方法,该方法使用 LINQ 常用的相同样式和模式。

public static IEnumerable<IEnumerable<T>> Batch<T>(this IEnumerable<T> source
, int batchSize)
{
//TODO validate parameters

List<T> buffer = new List<T>();

foreach (T item in source)
{
buffer.Add(item);

if (buffer.Count >= batchSize)
{
yield return buffer;
buffer = new List<T>();
}
}
if (buffer.Count >= 0)
{
yield return buffer;
}
}

关于c# - 使用 LINQ 将列表转换为列表的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13845650/

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