我们说我有2个列表,列表时间段和列表室。他们已经在开始时拥有这些物品。
让我们说
List Timeslot = T1,T3,T5,T2,T10,T3,T5,T1,T10,T24
List Room = R1,R2,R3,R5,R4,R2,R3,R1,R4,R5
我们可以看到List Timeslot中的相同项目在索引0和7中。 但在列表房间的索引为0和7时,项目也相同:R1和R1。
我想让列表室中的项目变得与众不同。但我们只能更改列表室中的项目。
例如,在列表Room中的索引0和7处,项目变为R1和R2。 假设我有20个可用房间:R1直到R20。
答案 0 :(得分:2)
如果我理解您的意图正确,并且您尝试将房间分配到时间,您可以尝试使用不同的结构来完成此任务。例如,使用Dictionary<Timeslot, HashSet<Room>()
来保存您的数据。这将允许您为任何时间段预订任何不同的房间,并实现我认为您的意图。但是,如果您必须使用两个列表,那么这不是您需要的方法。
这里有一些未经测试的示例代码(我不知道你的结构是什么):
Dictionary<Timeslot, HashSet<Room>> schedule;
List<Room> allRooms;
void AssignRoom(Timeslot time, Room room)
{
if (!schedule.ContainsKey(time))
{
// No rooms currently assigned to this time.
var rooms = new HashSet<Room>() { room };
schedule.Add(time, rooms);
}
else
{
if (schedule[time].Contains(room))
{
// Room conflict -- add a different room here
var roomOK = allrooms.Except(schedule[time]).FirstOrDefault();
if (roomOK == null)
HeadExplodes(); // You've run out of rooms!
else
{
schedule[time].Add(roomOK);
}
}
else
{
// No conflicts so just add the room
schedule[time].Add(room);
}
}
}