Tôi đã sử dụng LINQ làm cách nào để chia danh sách thành danh sách phụ theo các mục tối đa trong mỗi danh sách. Nhưng trong trường hợp này, tôi quan tâm đến việc lặn một danh sách phụ bằng cách sử dụng sizemb làm trọng lượng - có tổng số tệp tối đa cho mỗi danh sách 9mb.LINQ: Chia danh sách thành các nhóm theo trọng lượng/kích thước
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;
Danh sách trên sẽ được chia thành 3 danh sách. Nếu bất kỳ 'tệp' nào lớn hơn 9mb, chúng phải nằm trong danh sách riêng của chúng.
tôi đã thực hiện một tổ chức phi LINQ-phiên bản ở đây:
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);
}
lý do tại sao nó phải được ba danh sách chỉ có hai giá trị độc đáo –
Bạn muốn đạt được danh sách với doc1, danh sách với doc2 và danh sách với doc3 và doc4? –
Kết quả mong đợi là gì ?? –