如何在列表中循环

本文关键字:循环 列表 | 更新日期: 2023-09-27 18:28:00

有人能帮忙吗。

我有一个问题,我需要循环通过3条线,并使用C#检查它们是否相交。这三条线将构成一个三角形的一般形状。因此,一次只有两条线相交。

我有3个Line对象,并将它们存储在List行中。我目前检查十字路口的方法如下:

ProcessIntersections(lines[0], lines[1])
ProcessIntersections(lines[1], lines[2])
ProcessIntersections(lines[2], lines[0])

我可以在列表中循环一次,但要检查最后的交叉点,我必须再次通过第一行,并将其与最后一行进行检查。

有没有更好的方法来处理我的交集?如何通过只调用ProcessIntersections一次来循环遍历行列表?我试过了:

for (int i = 0; i < lines.Count; i++)
{
    if (i >= 3)
    {
        i = 0;
        ProcessIntersection(lines[i], lines[i + 1]);
    }
}

但这让我陷入了一个无限循环,因为我一直在重置为0。

有人有什么建议吗。

如何在列表中循环

尝试下一个循环:

for (int i = 0; i < lines.Count; i++)
{
  var next_i = i + 1;
  if (next_i >= lines.Count)
    next_i = 0;
  ProcessIntersection(lines[i], lines[next_i]);
}

或优化环路:

for (int i = 0; i < lines.Count; i++)
{
  ProcessIntersection(lines[i], lines[(i + 1) % lines.Count]);
}

如果你想用它的后继行检查每一行,然后用行[0]检查最后一行,你可以这样做:

for(int i = 0;i < lines.Count - 1;++i)
    ProcessIntersection(lines[i], lines[i + 1]);
if(lines.Count > 1)
  ProcessIntersection(lines[lines.Count - 1], lines[0]);

如果你真的想在for()循环中处理所有这些(这会对速度产生负面影响),你可以这样做:

for(int i = 0;i < lines.Count;++i)
  ProcessIntersection(lines[i], lines[i == lines.Count - 1 ? 0 : i + 1]);
for (int i = 0; i < lines.Count; i++)
{
        ProcessIntersection(lines[i], lines[i == lines.Count -1 ? 0 : i + 1]);
}