我试图将一个列表分成一系列较小的列表。
我的问题: 我的列表拆分功能无法将它们拆分为正确大小的列表。它应该将它们拆分为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<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)); } }