为列表中的每个项目分配位置,检查是否已经存在
本文关键字:检查 是否 存在 位置 分配 列表 项目 | 更新日期: 2023-09-27 18:16:08
我有一个" box "列表。列表中的每个框都有一个名为"position"的值。
当我的盒子列表建立时,其中一些被赋予了一个位置(int)。Position是我的代码用来确定每个框在页面上的位置的值。
我有一个包含13个盒子的列表,其中一个盒子的位置为13,另一个盒子的位置为4。
还有一个字段叫"order"。我现在要做的是将所有没有"位置"值的元素按"顺序"的值排序。(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;
}
我认为这可能是好的,但经过反思,如果takenPositions Does包含i和i++后的值也在takenPositions中呢?
我觉得这里需要某种形式的循环来测试i++在每次增量之后的结果。
有谁可以提供任何帮助吗?
如果你改变
if (takenPositions.Contains(i))
while (takenPositions.Contains(i))
自动递增,直到找到空闲位置。
有时我使用老式的for循环:
int j = 0;
for (int i = 1; i <= boxes.Count; i++)
{
if (takenPositions.Contains(i)) continue;
orderedBoxes[j++].Position = i;
}