2011-06-17 38 views
-1

我被堵的東西,似乎很容易,但成爲一個頭痛非常快,以確定最小值:需要在列表

這裏是代表我使用的是結構類:

public class LocumJobDistanceDifferenceObject { 

    public LocumJobDistanceDifferenceObject(Int64 ALocumID, Int64 AJobID, Decimal ADistanceMiles, Int32 ARateDifference, Boolean AIsDistanceUnderMax) { 
     LocumID = ALocumID; 
     JobID = AJobID; 
     DistanceMiles = ADistanceMiles; 
     RateDifference = ARateDifference; 
     IsDistanceUnderMax = AIsDistanceUnderMax; 
    } 

    public Int64 LocumID { 
     get; 
     set; 
    } 

    public Int64 JobID { 
     get; 
     set; 
    } 

    public Decimal DistanceMiles { 
     get; 
     set; 
    } 

    public Int32 RateDifference { 
     get; 
     set; 
    } 

    public Boolean IsDistanceUnderMax { 
     get; 
     set; 
    } 
} 

我創建一個列表來存儲信息矩陣。 Locum是一名工人,他需要被安置在工作崗位上。恐怕我有50個工作和75個Locums。我通過運行Locums x Jobs算法來構建我的矩陣,該算法在Locum和Job之間存儲LocumID + JobID + Detrmine DistanceMiles +確定Job支付/小時和Locum想要的/小時的比率+如果對Job的支持超過Locum的最大距離,旅行

所以,基本上,因爲它是Matrix中的Locums(75)x Jobs(50)行數。

現在,我需要運行在我的矩陣循環(的ForEach)(我稱之爲MindMapTier01)如下:

foreach (LocumJobDistanceDifferenceObject LocumJobDistanceDifferenceItem in MindMapTier01.OrderBy(order=>order.JobID)) { 
    /** 
    * Build a list (KeyValuePair<JobID, LocumID>) such that for each unique JobID, 
    * I can assign the Locum closest to that Job. I need to keep in mind that 
    * once a job is assigned, I dont want that JobID or LocumID for the next iteration 
    **/ 
} 

我希望我解釋自己。我需要在一兩個小時之內解決這個問題。請幫忙。

問候。

回答

0

我不知道我完全理解你的問題,但如果你想確保作業分配到最近的臨時代理,然後你的代碼看起來是這樣的:

Dictionary<Int64, Int64> dicJobLocum = New Dictionary<Int64, Int64>(); // This is the key value pair list 
Dictionary<Int64, Int64> dicJobDistance = New Dictionary<Int64, Decimal>(); // This is to track the distance of the currently assigned locum 

foreach (LocumJobDistanceDifferenceObject locum in MindMapTier01) { 
    if (dicJobDistance.ContainsKey(locum.JobID) { 
     Decimal distance = dicJobDistance(locum.JobID); 
     // If the job has been assigned, check if the current locum is closer 
     if (locum.DistanceMiles < distance) { 
      dicJobDistance(locum.JobID) = locum.Distance; 
      dicJobLocum(locum.JobID) = locum.LocumID; 
     } 
    } 
    else { 
     // If the job has not been assigned yet 
     dicJobDistance.Add(locum.JobID, locum.DistanceMiles); 
     dicJobLocum.Add(locum.JobID, locum.LocumID); 
    } 
} 

請原諒任何輕微語法錯誤,我最近沒有使用c#。

+0

我在設法通過您的建議後得到了結果。謝謝。 – DoomerDGR8