У меня есть коллекция «случаи» (IEnumerable<IPublishedContent>
), которые я хотел бы разделить на куски, как ниже, где каждая вторая строка содержит два столбца:Разделение коллекции на группы различных размеров
<div class="row">
<div class="col">1</div>
</div>
<div class="row">
<div class="col">2</div>
<div class="col">3</div>
</div>
<div class="row">
<div class="col">4</div>
</div>
<div class="row">
<div class="col">5</div>
<div class="col">6</div>
</div>
У меня видели различные подходы с использованием методов расширения, например .Chunk(2)
, .Batch(2)
или .Split(2)
, но в основном там, где он разделен на фиксированные размеры, например. [1,2], [3,4], [5,6], [7]
На данный момент я следующее:
var batches = w
.Select((x, i) => new { x, i })
.GroupBy(p => (p.i/(p.i % 2 == 0 ? 2 : 1)), p => p.x);
var rows = batches;
var count = 0;
foreach (var row in rows)
{
<div class="row">
@foreach (var c in row)
{
<div class="col">@(count+1)</div>
count++;
}
</div>
}
Когда коллекция содержит 7 элементов, выход:
<div class="row">
<div class="col">1</div>
</div>
<div class="row">
<div class="col">2</div>
<div class="col">3</div>
</div>
<div class="row">
<div class="col">4</div>
<div class="col">5</div>
</div>
<div class="row">
<div class="col">6</div>
</div>
<div class="row">
<div class="col">7</div>
</div>
Любое предложение, как я могу получить выход как в первом примере?
Почему вы делите? Вам просто нужно p.1% 2. – jdweng
Нет, это тоже пробовало, что разделило коллекцию на две группы - сначала с 4, а с второй - с 3. Таким образом, вывод выдал две строки, из которых 4 столбца в первой строке и 3 столбца во второй строке. –
Затем вы хотите разделить на 2: p => (int) (pi/2) – jdweng