ich LINQ viele Beispiele verwendet haben, wie eine Liste in Unterliste teilen nach max Elemente in jeder Liste. Aber in diesem Fall bin ich daran interessiert, eine Sub-Liste mit Sizemb als Gewicht zu tauchen - mit einer maximalen Dateigröße von 9mb.LINQ: Split-Liste in Gruppen nach Gewicht/Größe
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;
Die obige Liste sollte dann in 3 Listen unterteilt werden. Wenn "Dateien" mehr als 9 MB groß sind, sollten sie in einer eigenen Liste stehen.
Ich habe eine nicht LINQ-Version hier:
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);
}
, warum es drei Listen sein sollte, gibt es nur zwei eindeutige Werte –
Sie wollen mit doc2 und Liste mit doc3 und DOC4 mit doc1, Liste Liste erreichen? –
Was ist das erwartete Ergebnis? –