我正在尝试将列表拆分为一系列较小的列表。
我的问题: 我的拆分列表的功能没有将它们拆分为正确大小的列表。它应该将它们拆分为大小为 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
public static List> SplitList(List locations, int nSize=30) { var list = new List>();
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)); } }