循环中按上一个索引搜索列表



我正在尝试完成一个算法,将ProcTime添加到另外两个最大值(JobNumMax和WSMax)的最大值。我在循环中使用 FindLastIndex 和 FindLast 时遇到问题。 这是我的代码。

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 工作。

看起来您可能只是在使用 LINQ 语法时遇到问题。

FindLastIndexPredicate<JobListOrder>作为参数,即将JobListOrder作为输入返回真或假的函数。

因此,与其SortList.FindLastIndex(i.JobNum),不如拥有以下内容:

SortList.FindLastIndex(order => order.JobNum == i.JobNum);

在您的代码中更正:

int JobNumMax = 0;
int WSMax  0;
foreach (var i in SortList)
{
if (JobNumMax >= WSMax)
{
return i.EndHour = JobNumMax + i.ProcTime;
}
else if (JobNumMax > 0 && WSMax > 0)
{
return i.EndHour = WSMax + currentjob.ProcTime;
}
for (var j = 0; j < SortList.Count; j++)
{
int JobLNumMaxIndex = SortList.FindLastIndex(order => order.JobNum == i.JobNum);
JobNumMax = i.EndHour[JobNumMaxIndex];
for (var k = 0; k < SortList.Count; k++)
{
int WSMaxIndex = SortList.FindLastIndex(order => order.Workstation == i.Workstation);
WSMax = i.EndHour[JobNumMaxIndex];
}
}
}

最新更新