LINQを使用して各リストの最大アイテムに従ってリストをサブリストに分割する方法の例がたくさんあります。しかし、この場合、私は重量としてsizembを使ってサブリストをダイビングすることに興味があります - リスト当たり最大ファイルサイズは9MBです。LINQ:リストを重み/サイズに応じてグループに分割する
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つのリストに分けられます。 'ファイル'が9MBを超える場合は、自分のリストに入れる必要があります。
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);
}
は、なぜそれがあなたがDOC3とdoc4とDOC2とリストとDOC1、リストのリストを達成したい –
のみ2つのユニークな値があります3つのリストでなければなりませんか? –
期待される結果は何ですか? –