尝试将列表拆分为更小的列表时出错
Error when trying to split list into smaller lists
错误:
cannot convert from 'System.Collections.Generic.List<System.Collections.Generic.IEnumerable>' to 'System.Collections.Generic.List'
代码:
for (int i = 0; i < Speed; i++)
{
Tasks[i] = Task.Run(() =>
{
var arr_ = arr.Chunk(Total / Speed).ToList();
Program.Check(arr_, Key, Current, Total, Node, Token);
}, Token);
}
Chunk(int)
方法:
public static IEnumerable<IEnumerable<T>> Chunk<T>(this IEnumerable<T> list, int chunkSize)
{
if (chunkSize <= 0)
{
throw new ArgumentException("chunkSize must be greater than 0.");
}
while (list.Any())
{
yield return list.Take(chunkSize);
list = list.Skip(chunkSize);
}
}
我已经被困在这里一段时间了,没有解决办法,你们中的任何人都可以告诉我我做错了什么吗?这个想法是从一个更大的列表 (arr
) 开始,然后在一个循环中将它转换成更小的 Total / Speed
大小的列表,然后将它用于另一个函数。
我对 yield return
工作原理的理解是,每次调用它时,它都应该 return 它所在循环的下一次迭代,但我不太确定这是它究竟是如何工作的,否则它看起来应该在这里工作。
感谢任何帮助,谢谢
Chunk()
return 是 IEnumerable<T>
的 IEnumerable
。您正试图将其转换为 List<T>
,这永远行不通。
你拿了一张清单,把它分成更小的清单,然后尝试把所有这些更小的清单放回到一个大清单中。
如果您确实打算将子列表合并回一个列表,您可以这样做:
var _list = list.Chunk(3).SelectMany(i => i).ToList();
如果您根据其 return 类型正确使用 Chunk()
,它就可以正常工作,例如
List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6 };
foreach (var chunk in list.Chunk(3))
Console.WriteLine(string.Join(", ", chunk));
产出
1, 2, 3
4, 5, 6
错误:
cannot convert from 'System.Collections.Generic.List<System.Collections.Generic.IEnumerable>' to 'System.Collections.Generic.List'
代码:
for (int i = 0; i < Speed; i++)
{
Tasks[i] = Task.Run(() =>
{
var arr_ = arr.Chunk(Total / Speed).ToList();
Program.Check(arr_, Key, Current, Total, Node, Token);
}, Token);
}
Chunk(int)
方法:
public static IEnumerable<IEnumerable<T>> Chunk<T>(this IEnumerable<T> list, int chunkSize)
{
if (chunkSize <= 0)
{
throw new ArgumentException("chunkSize must be greater than 0.");
}
while (list.Any())
{
yield return list.Take(chunkSize);
list = list.Skip(chunkSize);
}
}
我已经被困在这里一段时间了,没有解决办法,你们中的任何人都可以告诉我我做错了什么吗?这个想法是从一个更大的列表 (arr
) 开始,然后在一个循环中将它转换成更小的 Total / Speed
大小的列表,然后将它用于另一个函数。
我对 yield return
工作原理的理解是,每次调用它时,它都应该 return 它所在循环的下一次迭代,但我不太确定这是它究竟是如何工作的,否则它看起来应该在这里工作。
感谢任何帮助,谢谢
Chunk()
return 是 IEnumerable<T>
的 IEnumerable
。您正试图将其转换为 List<T>
,这永远行不通。
你拿了一张清单,把它分成更小的清单,然后尝试把所有这些更小的清单放回到一个大清单中。
如果您确实打算将子列表合并回一个列表,您可以这样做:
var _list = list.Chunk(3).SelectMany(i => i).ToList();
如果您根据其 return 类型正确使用 Chunk()
,它就可以正常工作,例如
List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6 };
foreach (var chunk in list.Chunk(3))
Console.WriteLine(string.Join(", ", chunk));
产出
1, 2, 3
4, 5, 6