为列表中的每个项目分配位置,检查是否已经存在



我有一个" 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;
}

最新更新