Mam wiele przykładów, używając LINQ, jak podzielić listę na listę podrzędną zgodnie z maksimum pozycji na każdej liście. Ale w tym przypadku jestem zainteresowany nurkowaniem w podlistach przy użyciu sizembów jako wagi - mając maksymalny łączny rozmiar na liście 9mb.LINQ: Podział listy na grupy według wagi/rozmiaru
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;
Powyższa lista powinna zostać podzielona na 3 listy. Jeśli jakieś "pliki" mają więcej niż 9 MB, powinny znajdować się na ich własnej liście.
Zrobiłem non LINQ wersję tutaj:
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);
}
dlaczego powinno być trzy listy jest tylko dwóch unikalnych wartości –
chcesz listę doc1, listy z zmienna doc2 i listy z doc3 i doc4 osiągnąć? –
Jaki jest oczekiwany wynik? –