小编典典

将列表拆分为 N 大小的较小列表

all

我正在尝试将列表拆分为一系列较小的列表。

我的问题: 我的拆分列表的功能没有将它们拆分为正确大小的列表。它应该将它们拆分为大小为 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


阅读 79

收藏
2022-04-22

共1个答案

小编典典

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)); 
    }  
}
2022-04-22