我有一个“盒子”列表。对列表中的每个框都有一个名为“position”的值。
当我的盒子列表被构建时,一些盒子被赋予一个位置(int)。位置是我的代码用来确定每个方框在我的页面上的位置的值。
所以,我有一个包含13个盒子的列表,我有一个位置= 13的盒子和一个位置为4的盒子。其余的盒子当前为空。
对于一个盒子,还有另一个名为“order”的字段。我现在需要做的是按“顺序”中的值排序没有“位置”值的所有内容。 (订单不可为空)。
到目前为止很容易。但是,我现在需要做的是循环返回的每个值并给它们一个位置值。但我需要跳过已经采用的位置值(目前为4和13)。这就是我在做的事情:
var orderedBoxes = (from a in boxes
orderby a.Order
where a.Position == null
select a).ToList();
List<int> takenPositions = (from a in boxes
where a.Position != null
select a.Position).ToList();
foreach (var box in orderedBoxes)
{
if (takenPositions.Contains(i))
{
// i++
// box.Position =i;
}
//box.Position =i;
}
我认为这可能没问题,但是经过反思,如果takePositions包含i并且i ++之后的值也在takePositions中会怎么样?
我觉得我需要某种形式的循环来测试每次增量后i ++的结果。
任何人都可以提供任何帮助!
答案 0 :(得分:1)
如果你改变了
,它可能会被解决 if (takenPositions.Contains(i))
在
while (takenPositions.Contains(i))
它会自动递增,直到找到空闲位置。
答案 1 :(得分:0)
有时我会使用旧的for循环:
int j = 0;
for (int i = 1; i <= boxes.Count; i++)
{
if (takenPositions.Contains(i)) continue;
orderedBoxes[j++].Position = i;
}