考虑以下列表:
var headers = new List<TableHeader>()
{
new TableHeader("Column1", 3),
new TableHeader("Column2", 2),
new TableHeader("Column3", 1, Alignment.Right),
new TableHeader("Column4", 1),
new TableHeader("Column5", 1),
new TableHeader("Column6", 6, Alignment.Right),
new TableHeader("Column7", 2, Alignment.Right),
};
TableHeader构造函数中的第二个参数是Width。
我想将上面的列表拆分为N个单独的列表,每个列表包含总宽度最大值。例如,如果W等于7,那么我需要获得包含TableHeader对象的3个列表,如下所示:
任何帮助都将受到高度赞赏。
答案 0 :(得分:1)
这是我已经实施的。还有更好的主意吗?
public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> source, double maxWidth) where T : TableHeader
{
while (source.Any())
{
int skip = 0;
double totalWidth = 0;
yield return source.TakeWhile(h =>
{
totalWidth += h.Width;
if (totalWidth <= maxWidth)
skip++;
return totalWidth <= maxWidth;
});
source = source.Skip(skip);
}
}