Ho molti esempi che utilizzano LINQ come dividere un elenco in un sotto-elenco in base alle voci massime in ciascuna lista. Ma in questo caso sono interessato a immergere una sotto-lista usando sizemb come un peso - avendo un file totale massimo per lista di 9mb.LINQ: Dividi l'elenco in gruppi in base al peso/dimensione
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;
L'elenco precedente deve essere diviso in 3 elenchi. Se alcuni "file" sono più di 9mb dovrebbero essere nella loro lista.
Ho fatto una LINQ-versione non qui:
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);
}
perché dovrebbe essere tre liste ci sono solo due valori unici –
si vuole raggiungere con la lista doc1, la lista con doc2 e la lista con doc3 e doc4? –
Qual è il risultato previsto ?? –