将列表拆分为N个较小的N列表我试图将列表拆分成一系列较小的列表。我的问题:我拆分列表的功能不会将它们拆分成正确大小的列表。它应该将它们分成大小为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;}如果我在144的列表上使用该函数,那么输出是:指数:4,大小:120 指数:3,大小:114 索引:2,大小:114 索引:1,大小:114 索引:0,大小:114
3 回答
拉莫斯之舞
TA贡献1820条经验 获得超10个赞
public static List<List<float[]>> splitList(List<float[]> locations, int nSize=30) { var list = new List<List<float[]>>(); for (int i=0; i < locations.Count; i+= nSize) { list.Add(locations.GetRange(i, Math.Min(nSize, locations.Count - i))); } return list; }
通用版本:
public static IEnumerable<List<T>> splitList<T>(List<T> locations, int nSize=30) { for (int i=0; i < locations.Count; i+= nSize) { yield return locations.GetRange(i, Math.Min(nSize, locations.Count - i)); } }
狐的传说
TA贡献1804条经验 获得超3个赞
我建议使用此扩展方法将源列表按指定的块大小分块到子列表:
/// <summary>
/// Helper methods for the lists.
/// </summary>
public static class ListExtensions
{
public static List<List<T>> ChunkBy<T>(this List<T> source, int chunkSize)
{
return source
.Select((x, i) => new { Index = i, Value = x })
.GroupBy(x => x.Index / chunkSize)
.Select(x => x.Select(v => v.Value).ToList())
.ToList();
}
}
例如,如果您将18个项目的列表按每个块5个项目进行分块,则会为您提供4个子列表的列表,其中包含以下项目:5-5-5-3。
阿晨1998
TA贡献2037条经验 获得超6个赞
怎么样:
while(locations.Any()){ list.Add(locations.Take(nSize).ToList()); locations= locations.Skip(nSize).ToList();}
- 3 回答
- 0 关注
- 546 浏览
添加回答
举报
0/150
提交
取消