Необходимо определить наименьшее значение в списке - PullRequest
0 голосов
/ 17 июня 2011

Я застрял в чем-то, что казалось легким, но быстро стало головной болью:

Вот класс, представляющий структуру, которую я использую:

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, в котором хранятся LocumID + JobID + Detrmine DistanceMiles между Locum и Job + Определить скорость, по которой Job платит / час, и Locum хочет / час + Если расстояние до Job превышает максимальное расстояние Locum, которое он / она желаетtravel

Так что, в основном, это количество строк в матрице 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
    **/
}

Я надеюсь, что объяснил сам.Мне нужно преодолеть это в течение часа или двух.Пожалуйста, помогите.

С уважением.

1 Ответ

0 голосов
/ 17 июня 2011

Я не знаю, полностью ли я понимаю вашу проблему, но если вы хотите убедиться, что задание назначено ближайшему идентификатору, ваш код может выглядеть следующим образом:

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 #.

...