有没有什么方法可以将项目索引作为每个拆分的分隔符List<SomeObject>分成几个单独的列表SomeObject?
让我举例说明:
我有一个List<SomeObject>,我需要一个List<List<SomeObject>>或List<SomeObject>[],所以这些结果列表中的每一个将包含一组3个原始列表项(顺序).
例如.:
原始清单: [a, g, e, w, p, s, q, f, x, y, i, m, c]
结果列表: [a, g, e], [w, p, s], [q, f, x], [y, i, m], [c]
我还需要将结果列表大小作为此函数的参数.
我试图将列表拆分成一系列较小的列表.
我的问题:我拆分列表的功能不会将它们拆分成正确大小的列表.它应该将它们分成大小为30的列表,而是将它们分成大小为114的列表?
如何使我的功能将列表拆分为X个大小为30或更小的列表?
public static List<List<float[]>> splitList(List <float[]> locations, int nSize=30)
{
List<List<float[]>> list = new List<List<float[]>>();
for (int i=(int)(Math.Ceiling((decimal)(locations.Count/nSize))); i>=0; i--) {
List <float[]> subLocat = new List <float[]>(locations);
if (subLocat.Count >= ((i*nSize)+nSize))
subLocat.RemoveRange(i*nSize, nSize);
else subLocat.RemoveRange(i*nSize, subLocat.Count-(i*nSize));
Debug.Log ("Index: "+i.ToString()+", Size: "+subLocat.Count.ToString());
list.Add (subLocat);
}
return list;
}
Run Code Online (Sandbox Code Playgroud)
如果我在144的列表上使用该函数,那么输出是:
指数:4,大小:120
指数:3,大小:114
索引:2,大小:114
索引:1,大小:114
索引:0,大小:114
我需要一个优雅的方法,它采用一个可枚举的方法,并获得可枚举的枚举数,每个元素中包含相同数量的元素但最后一个:
public static IEnumerable<IEnumerable<TValue>> Chunk<TValue>(this IEnumerable<TValue> values, Int32 chunkSize)
{
// TODO: code that chunks
}
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
public static IEnumerable<IEnumerable<TValue>> Chunk<TValue>(this IEnumerable<TValue> values, Int32 chunkSize)
{
var count = values.Count();
var numberOfFullChunks = count / chunkSize;
var lastChunkSize = count % chunkSize;
for (var chunkIndex = 0; chunkSize < numberOfFullChunks; chunkSize++)
{
yield return values.Skip(chunkSize * chunkIndex).Take(chunkSize);
}
if (lastChunkSize > 0)
{
yield return values.Skip(chunkSize * count).Take(lastChunkSize);
}
}
Run Code Online (Sandbox Code Playgroud)
我想一次只处理 X 个文件以进行以下无限循环。下面的代码一次给我所有文件,如何只获得 X 个文件?
while (true)
{
var files = new DirectoryInfo(@"path")
.GetFiles()
.OrderBy(p => p.LastWriteTimeUtc)
.ToList();
foreach (var f in files)
{
//do some processing
Console.WriteLine(f.Name);
f.Delete();
}
Thread.Sleep(5000);
}
Run Code Online (Sandbox Code Playgroud)