Tôi có một IEnumerable và tôi muốn chia dữ liệu trên 3 cột bằng cách sử dụng logic nghiệp vụ sau. nếu 3 hoặc ít hơn các mục, 1 mục cho mỗi cột, bất cứ điều gì khác tôi muốn chia tổng số mục bằng cách chia 3 phần còn lại (hoặc 1 hoặc 2 mục) giữa hai cột đầu tiên. Bây giờ điều này là khá xấu xí nhưng nó thực hiện công việc. Tôi đang tìm lời khuyên để tận dụng LINQ tốt hơn một chút hoặc có thể loại bỏ các tuyên bố chuyển đổi. Bất kỳ lời khuyên hoặc lời khuyên nào để cải thiện mã đều được đánh giá cao.Trình biên dịch thuật toán C# tách một mảng thành 3 phần?
var numItems = items.Count;
IEnumerable<JToken> col1Items,
col2Items,
col3Items;
if(numItems <=3)
{
col1Items = items.Take(1);
col2Items = items.Skip(1).Take(1);
col3Items = items.Skip(2).Take(1);
} else {
int remainder = numItems % 3,
take = numItems/3,
col1Take,
col2Take,
col3Take;
switch(remainder)
{
case 1:
col1Take = take + 1;
col2Take = take;
col3Take = take;
break;
case 2:
col1Take = take + 1;
col2Take = take + 1;
col3Take = take;
break;
default:
col1Take = take;
col2Take = take;
col3Take = take;
break;
}
col1Items = items.Take(col1Take);
col2Items = items.Skip(col1Take).Take(col2Take);
col3Items = items.Skip(col1Take + col2Take).Take(col3Take);
Rốt cuộc tôi đang sử dụng chúng trong một cái nhìn Razor MVC
<div class="widgetColumn">
@Html.DisplayFor(m => col1Items, "MenuColumn")
</div>
<div class="widgetColumn">
@Html.DisplayFor(m => col2Items, "MenuColumn")
</div>
<div class="widgetColumn">
@Html.DisplayFor(m => col3Items, "MenuColumn")
</div>
Trong nỗ lực đầu tiên của tôi, tôi muốn thoát khỏi colNItems và các biến colNTake nhưng tôi không thể tìm ra các thuật toán chính xác để làm cho nó hoạt động giống nhau.
for (int i = 1; i <= 3; i++)
{
IEnumerable<JToken> widgets = new List<JToken>();
var col = i;
switch(col)
{
case 1:
break;
case 2:
break;
case 3:
break;
}
}
Câu hỏi này có lẽ phù hợp hơn cho http://codereview.stackexchange.com/ –
Suy nghĩ đệ quy! quy tắc còn lại về nguyên tắc giống như quy tắc 'nhỏ hơn 3', lần lượt tương tự như quy tắc phân chia – Polity