各リストの最大項目に応じてリストをサブリストに分割する方法について、LINQ を使用した多くの例があります。しかし、この場合、重みとしてsizembを使用してサブリストをダイビングすることに興味があります-リストごとの最大合計ファイルサイズは9mbです。
public class doc
{
public string file;
public int sizemb;
}
var list = new List<doc>()
{
new doc { file = "dok1", sizemb = 5 },
new doc { file = "dok2", sizemb = 5 },
new doc { file = "dok3", sizemb = 5 },
new doc { file = "dok4", sizemb = 4 },
};
int maxTotalFileSize = 9;
次に、上記のリストを 3 つのリストに分割する必要があります。「ファイル」が 9 MB を超える場合は、独自のリストに含める必要があります。
ここで非LINQバージョンを作成しました:
var lists = new List<List<doc>>();
foreach (var item in list)
{
//Try and place the document into a sub-list
var availableSlot = lists.FirstOrDefault(p => (p.Sum(x => x.sizemb) + item.sizemb) < maxGroupSize);
if (availableSlot == null)
lists.Add(new List<doc>() { item });
else
availableSlot.Add(item);
}