如何让2个列表在C#中有不同的项目

时间:2015-07-19 03:58:00

标签: c# list

我们说我有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。

1 个答案:

答案 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);   
        }
    }
}