2015-07-19 93 views
-1

假設我有2個列表,分別是List Timeslot和List Room。他們已經有了開始的項目。如何使2個列表在C#中有不同的項目#

比方說

List Timeslot = T1,T3,T5,T2,T10,T3,T5,T1,T10,T24 

List Room  = R1,R2,R3,R5,R4,R2,R3,R1,R4,R5 

,我們可以看到,在列表時隙有哪些是在0和7 的索引,但在0和列表室7的指數在同一個項目,該項目也同樣:R1和R1。

我想讓列表房間中的項目變得不同。但我們只能更改列表房間中的項目。

例如,在列表Room中的索引0和7處,項目變爲R1和R2。 假設我有20個可用房間:R1直到R20。

+0

你就不能增加將R,直到有沒有衝突? –

回答

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); 
     } 
    } 
} 
相關問題