using System;
using System.Globalization;
using System.Collections.Generic;
using System.Linq;
public class Test
{
private static IEnumerable<IList<doc>> SplitDocumentList(IEnumerable<doc> allDocuments, int maxMB)
{
var lists = new List<IList<doc>>();
var list = new List<doc>();
foreach (doc document in allDocuments)
{
int totalMB = list.Sum(d => d.sizemb) + document.sizemb;
if (totalMB > maxMB)
{
lists.Add(list);
list = new List<doc>();
}
list.Add(document);
}
if (list.Count > 0)
lists.Add(list);
return lists;
}
public static void Main()
{
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;
IEnumerable<IList<doc>> splittedtDocs = SplitDocumentList(list, maxTotalFileSize);
foreach(var l in splittedtDocs)
Console.WriteLine(string.Join(",",l.Select(d=>d.file).ToArray()));
}
public class doc
{
public string file;
public int sizemb;
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uR2xvYmFsaXphdGlvbjsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CnVzaW5nIFN5c3RlbS5MaW5xOwoKcHVibGljIGNsYXNzIFRlc3QKewogICAgcHJpdmF0ZSBzdGF0aWMgSUVudW1lcmFibGU8SUxpc3Q8ZG9jPj4gU3BsaXREb2N1bWVudExpc3QoSUVudW1lcmFibGU8ZG9jPiBhbGxEb2N1bWVudHMsIGludCBtYXhNQikKICAgIHsKICAgICAgICB2YXIgbGlzdHMgPSBuZXcgTGlzdDxJTGlzdDxkb2M+PigpOwogICAgICAgIHZhciBsaXN0ID0gbmV3IExpc3Q8ZG9jPigpOwogICAgICAgIGZvcmVhY2ggKGRvYyBkb2N1bWVudCBpbiBhbGxEb2N1bWVudHMpCiAgICAgICAgewogICAgICAgICAgICBpbnQgdG90YWxNQiA9IGxpc3QuU3VtKGQgPT4gZC5zaXplbWIpICsgZG9jdW1lbnQuc2l6ZW1iOwogICAgICAgICAgICBpZiAodG90YWxNQiA+IG1heE1CKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBsaXN0cy5BZGQobGlzdCk7CiAgICAgICAgICAgICAgICBsaXN0ID0gbmV3IExpc3Q8ZG9jPigpOwogICAgCiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGlzdC5BZGQoZG9jdW1lbnQpOwogICAgICAgIH0KICAgICAgICBpZiAobGlzdC5Db3VudCA+IDApCiAgICAgICAgICAgIGxpc3RzLkFkZChsaXN0KTsKICAgICAgICByZXR1cm4gbGlzdHM7CiAgICB9CiAgIAoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewogICAgICAgIHZhciBsaXN0ID0gbmV3IExpc3Q8ZG9jPigpCiAgICAgICAgewogICAgICAgICAgICAgbmV3IGRvYyB7IGZpbGUgPSAiZG9rMSIsIHNpemVtYiA9IDUgfSwKICAgICAgICAgICAgIG5ldyBkb2MgeyBmaWxlID0gImRvazIiLCBzaXplbWIgPSA1IH0sCiAgICAgICAgICAgICBuZXcgZG9jIHsgZmlsZSA9ICJkb2szIiwgc2l6ZW1iID0gNSB9LAogICAgICAgICAgICAgbmV3IGRvYyB7IGZpbGUgPSAiZG9rNCIsIHNpemVtYiA9IDQgfSwKICAgICAgICB9OwoKICAgICAgICBpbnQgbWF4VG90YWxGaWxlU2l6ZSA9IDk7CgogICAgICAgIElFbnVtZXJhYmxlPElMaXN0PGRvYz4+IHNwbGl0dGVkdERvY3MgPSBTcGxpdERvY3VtZW50TGlzdChsaXN0LCBtYXhUb3RhbEZpbGVTaXplKTsKICAgICAgICAKICAgICAgZm9yZWFjaCh2YXIgbCBpbiBzcGxpdHRlZHREb2NzKQogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZShzdHJpbmcuSm9pbigiLCIsbC5TZWxlY3QoZD0+ZC5maWxlKS5Ub0FycmF5KCkpKTsKCX0KICAgIAogICAgcHVibGljIGNsYXNzIGRvYwogICAgewogICAgICAgIHB1YmxpYyBzdHJpbmcgZmlsZTsKICAgICAgICBwdWJsaWMgaW50IHNpemVtYjsKICAgIH0KfQ==