使用C#
所以我有一个namevaluecollection,可以包含一般数量为40-50的可变数量的条目。
我想要做的是一次取3个条目并按顺序处理它们。对于例如如果整个集合= 9,那么就像1-3,然后4-6,然后7-9。
问题是我无法递归地获取它们,如果我说13个条目会发生什么,那么它就像3 * 4 + 1。
我尝试使用.TAKE,但不知道如何以递归方式执行此操作。
任何指示赞赏。
int TotalTestImage = TestImages.Count();
int y = 0;
int Interator = TotalTestImage / 3;
if((TotalTestImage % 3) != 0)
{
Interator += 1;
}
int i = 0;
for(int k = 0; k < Interator; k++)
{
sb.AppendLine("<div class=\"row\">");
TestImages.Take(3).Skip(y * 3).ToList().ForEach( o => {
switch (o.Key)
{
case "CaseID":
CaseID = Convert.ToInt16(o.Value);
break;
default:
i += 1;
Controls = GetDropDown(o.Value);
ActualValues.Add(o.Value);
sb.AppendLine("<div class=\"col-md-3\">");
sb.AppendLine("<div class=\"box box-success box-solid\">");
sb.AppendLine("<div class=\"box-header with-border\">");
sb.AppendFormat("<h3 class=\"box-title\">Question {0}</h3>", i);
sb.AppendLine("<div class=\"box-tools pull-right\">");
sb.AppendLine("<button type = \"button\" class=\"btn btn-box-tool\" data-widget=\"collapse\">");
sb.AppendLine("<i class=\"fa fa-minus\"></i>");
sb.AppendLine("</button>");
sb.AppendLine("</div>");
sb.AppendLine("</div>");
sb.AppendLine("<div class=\"box-body\">");
sb.AppendLine("<div class=\"row\">");
sb.AppendLine("<div class=\"col-lg-9\">");
sb.AppendFormat("<img src =\"{0}\" alt=\"\" class=\"center-block\">", o.Key);
sb.AppendLine("</div>");
sb.AppendLine("<div class=\"col-lg-3\">");
sb.AppendLine(Controls[1]);
sb.AppendLine("</div>");
sb.AppendLine("</div>");
sb.AppendLine("<div class=\"row\" style=\"margin-top:10px\">");
sb.AppendLine("<div class=\"col-lg-9\">");
sb.AppendLine(Controls[0]);
sb.AppendLine("</div>");
sb.AppendLine("<div class=\"col-lg-3\"></div>");
sb.AppendLine("</div>");
sb.AppendLine("</div>");
sb.AppendLine("</div>");
sb.AppendLine("</div>");
break;
}
});
sb.AppendLine("</div>");
y += 1;
}
答案 0 :(得分:0)
当你对第二项使用Take()时,你应该跳过第一项。
在您的示例中,
var set1 = collection.Take(3); // will get first 3 items
var set2 = collection.Skip(3).Take(3); // will get first 4-6 items
.
.
.
答案 1 :(得分:-1)
您可以使用.Take
和.Skip
组合
var batchSize = 3;
var sequence = TestImages; //Uncertain what type is in TestImages
while(sequence.Any()) {
sb.AppendLine("<div class=\"row\">");
var batch = sequence.Take(batchSize);
//process the batch
processBatch(sb, batch);
sb.AppendLine("</div>");
sequence = sequence.Skip(batchSize);
}
processBatch
函数基本上与您在ForEach
void processBatch(StringBuilder sb, IEnumerabl<{TypeHere}> batch) {
foreach(var o in batch) {
switch (o.Key) {
case "CaseID":
CaseID = Convert.ToInt16(o.Value);
break;
default:
i += 1;
Controls = GetDropDown(o.Value);
ActualValues.Add(o.Value);
sb.AppendLine("<div class=\"col-md-3\">");
sb.AppendLine("<div class=\"box box-success box-solid\">");
sb.AppendLine("<div class=\"box-header with-border\">");
sb.AppendFormat("<h3 class=\"box-title\">Question {0}</h3>", i);
sb.AppendLine("<div class=\"box-tools pull-right\">");
sb.AppendLine("<button type = \"button\" class=\"btn btn-box-tool\" data-widget=\"collapse\">");
sb.AppendLine("<i class=\"fa fa-minus\"></i>");
sb.AppendLine("</button>");
sb.AppendLine("</div>");
sb.AppendLine("</div>");
sb.AppendLine("<div class=\"box-body\">");
sb.AppendLine("<div class=\"row\">");
sb.AppendLine("<div class=\"col-lg-9\">");
sb.AppendFormat("<img src =\"{0}\" alt=\"\" class=\"center-block\">", o.Key);
sb.AppendLine("</div>");
sb.AppendLine("<div class=\"col-lg-3\">");
sb.AppendLine(Controls[1]);
sb.AppendLine("</div>");
sb.AppendLine("</div>");
sb.AppendLine("<div class=\"row\" style=\"margin-top:10px\">");
sb.AppendLine("<div class=\"col-lg-9\">");
sb.AppendLine(Controls[0]);
sb.AppendLine("</div>");
sb.AppendLine("<div class=\"col-lg-3\"></div>");
sb.AppendLine("</div>");
sb.AppendLine("</div>");
sb.AppendLine("</div>");
sb.AppendLine("</div>");
break;
}
}
}