我有一个具有坐标的对象列表。该对象是这样的:
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/