c# - 检查列表成员是否以 4 人为一组,连续

标签 c# algorithm

我有一个具有坐标的对象列表。该对象是这样的:

private class Seats
{
    public string Code { get; set; }
    public long PosX { get; set; }
    public long PosY { get; set; }
}

对于列表中的所有座位,我需要知道它们是 4 个一组,位于水平行中。例如,下面的列表就可以:

List<Seats> good = new List<Seats> {
    new Seats {Code = "A1", PosX = 0, PosY = 0},
    new Seats {Code = "A2", PosX = 1, PosY = 0},
    new Seats {Code = "A3", PosX = 2, PosY = 0},
    new Seats {Code = "A4", PosX = 3, PosY = 0}
};

下面的列表也可以(两行):

List<Seats> good = new List<Seats> {
    new Seats {Code = "A1", PosX = 0, PosY = 0},
    new Seats {Code = "A2", PosX = 1, PosY = 0},
    new Seats {Code = "A3", PosX = 2, PosY = 0},
    new Seats {Code = "A4", PosX = 3, PosY = 0},
    new Seats {Code = "B1", PosX = 0, PosY = 1},
    new Seats {Code = "B2", PosX = 1, PosY = 1},
    new Seats {Code = "B3", PosX = 2, PosY = 1},
    new Seats {Code = "B4", PosX = 3, PosY = 1}
};

下面的列表也可以(同一行,两组,间隙在(4,0)):

List<Seats> good = new List<Seats> {
    new Seats {Code = "A1", PosX = 0, PosY = 0},
    new Seats {Code = "A2", PosX = 1, PosY = 0},
    new Seats {Code = "A3", PosX = 2, PosY = 0},
    new Seats {Code = "A4", PosX = 3, PosY = 0},
    new Seats {Code = "A6", PosX = 5, PosY = 0},
    new Seats {Code = "A7", PosX = 6, PosY = 0},
    new Seats {Code = "A8", PosX = 7, PosY = 0},
    new Seats {Code = "A9", PosX = 8, PosY = 0}
};

但是下面的列表不正确,因为 (3,0) 处有一个间隙:

List<Seats> bad1 = new List<Seats> {
    new Seats {Code = "A1", PosX = 0, PosY = 0},
    new Seats {Code = "A2", PosX = 1, PosY = 0},
    new Seats {Code = "A3", PosX = 2, PosY = 0},
    new Seats {Code = "A5", PosX = 4, PosY = 0}
};

下面的列表也不合适,因为有五个:

List<Seats> bad2 = new List<Seats> {
    new Seats {Code = "A1", PosX = 0, PosY = 0},
    new Seats {Code = "A2", PosX = 1, PosY = 0},
    new Seats {Code = "A3", PosX = 2, PosY = 0},
    new Seats {Code = "A4", PosX = 3, PosY = 0},
    new Seats {Code = "A5", PosX = 4, PosY = 0}
};

下面的列表也不合适,因为四个席位需要水平排列:

List<Seats> bad3 = new List<Seats> {
    new Seats {Code = "A1", PosX = 0, PosY = 0},
    new Seats {Code = "A2", PosX = 1, PosY = 0},
    new Seats {Code = "B1", PosX = 0, PosY = 1},
    new Seats {Code = "B2", PosX = 1, PosY = 1}
};

为了检查 4 的乘法(可以是 8、12...),我可以这样做:

list.Count % 4 == 0

但我需要有关如何“连续”检查的帮助。

最佳答案

根据 Y 值拆分列表中的所有值。

然后对于每个拆分列表:

  • 检查所有 Y 值是否相等。
  • 对于 X 值:迭代列表,并检查与前一个的差值是否等于前一个和之前的前一个(检查项目是否存在)。

假设这些点是按顺序排列的(如您的示例中所示),至少对于 X 坐标而言是这样。

关于c# - 检查列表成员是否以 4 人为一组,连续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9666206/

相关文章:

javascript - 复制页面附加javascript

c# - Roslyn 没有引用 System.Runtime

c - 格雷码中的邻居

algorithm - 将整数散列为字母数字而不发生冲突

algorithm - 我怎样才能找到包含一些给定点的最小圆圈?

java - Java 中的 Blowfish 实现

伪代码的算法复杂度

c# - C# 中的异步修饰符

c# - 是否有与 PHP 函数 `parse_str` 等效的 C# ?

c# - 系统.Net.WebException : The underlying connection was closed: An unexpected error occurred on a receive