Я пытаюсь выполнить алгоритм, который добавляет ProcTime к максимальному из двух других максимальных значений (JobNumMax и WSMax). У меня возникают проблемы с использованием FindLastIndex и FindLast в моих циклах. Вот мой код.Поиск списка по LastIndex в цикле.
public class JobListOrder
{
public int JobNum { get; set; }
public string Workstation { get; set; }
public int Sequence { get; set; }
public int ProcTime { get; set; }
public int EndHour { get; set; }
public DateTime DueDate { get; set; }
public int Priority { get; set; }
}
Ввод в список.
//New List
List<JobListOrder> list = new List<JobListOrder>();
using (StreamReader sr = new StreamReader("C:\\Users\\Nathan\\Documents\\Visual Studio 2013\\Projects\\PubsExample\\PubsExample\\JobsList.txt"))
{
//Add .txt to List
while (sr.Peek() >= 0)
{
string str;
string [] strArray;
str = sr.ReadLine();
strArray = str.Split(',');
JobListOrder currentjob = new JobListOrder();
currentjob.JobNum = int.Parse(strArray[0]);
currentjob.Workstation = strArray[1];
currentjob.Sequence = int.Parse(strArray[2]);
currentjob.ProcTime = int.Parse(strArray[3]);
currentjob.EndHour = int.Parse(strArray[4]);
currentjob.DueDate = DateTime.Parse(strArray[5]);
currentjob.Priority = int.Parse(strArray[6]);
list.Add(currentjob);
}
Сортировка в частности способ начать расчеты
//Job Sort
var ListSort = from jobsort in list
orderby jobsort.Sequence ascending, jobsort.Priority descending, jobsort.DueDate ascending, jobsort.JobNum ascending
select jobsort;
List<JobListOrder> SortList = new List<JobListOrder>(ListSort);
Вот небольшая попытка у него
//foreach (var i in SortList)
//{
// if (JobNumMax >= WSMax)
// {
// return i.EndHour = JobNumMax + i.ProcTime;
// }
// else
// return i.EndHour = WSMax + currentjob.ProcTime;
// for (var j = 0; j < SortList.Count; j++)
// {
// int JobLNumMaxIndex = SortList.FindLastIndex(i.JobNum)
// int JobNumMax = i.EndHour[JobNumMaxIndex];
// for (var k = 0; k < SortList.Count; k++)
// {
// int WSMaxIndex = SortList.FindLastIndex(i.Workstation);
// int WSMax = i.EndHour[JobNumMaxIndex];
// }
// }
//}
Я пытаюсь найти LastIndex для запроса и возвращает значение этого конкретного индекса. Я попытаюсь объяснить, что я имею в виду в коде ниже поиске JobNum = 1 и рабочая станция = Фрезерование с ProcTime 1
foreach (var i in SortList) //Iterate through SortList
{
if (JobNumMax (3) >= WSMax (4))
{
return i.EndHour = JobNumMax (3) + i.ProcTime (1); //assigns calculation to EndHour of current record
}
else
return i.EndHour = WSMax (4) + i.ProcTime (1);
for (var j = 0; j < SortList.Count; j++)
{
int JobLNumMaxIndex = SortList.FindLastIndex(1) //Finds last record with JobNum = 1
int JobNumMax = i.EndHour[JobNumMaxIndex];//Return what EndHour is at the index from JobNumMaxIndex search// Lets say 3
for (var k = 0; k < SortList.Count; k++)
{
int WSMaxIndex = SortList.FindLastIndex(Milling);//Finds last record with Workstation = Milling
int WSMax = i.EndHour[JobNumMaxIndex];//Return what EndHour is at the index from WSMaxIndex search// Lets say 4
}
}
}
Результат будет 4 + 1 = 5.
Я имею проблема с синтаксисом алгоритма. Я не могу заставить FindLast работать вообще.
Высокого. Это сработало для этих проблем FindLastIndex. Наверное, у меня другая проблема. В int JobNumMax = i.EndHour [JobNumMaxIndex]; он говорит, что применять индексирование с [] к выражению типа 'int'. Я могу что-то контролировать, но он также не распознает JobNumMax или WSMax в текущем контексте в инструкции If/else. – nbaylot46
Я внес изменения в код, чтобы переместить объявления за пределы цикла - так как ранее они были привязаны только к внутренним контурам. Я немного смущен тем, почему вы используете цикл, хотя он только когда-либо собирается зацикливаться один раз, а затем возвращается из-за первого оператора if. Если вы отредактируете свой вопрос, чтобы показать некоторые входы образца и нужный результат из функции, это может быть легче помочь. – RagtimeWilly