c# - 在循环中按 LastIndex 搜索列表。

标签 c# list

我正在尝试完成一种算法,将 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 和 Workstation = Milling,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 语法时遇到了问题。

FindLastIndex将采取 Predicate<JobListOrder>作为参数,即一个接受 JobListOrder 的函数作为输入,返回 true 或 false。

所以不是 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];
        }
    }
}

关于c# - 在循环中按 LastIndex 搜索列表。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30021614/

相关文章:

list - 使用 LISP 遍历列表中的每个项目

c# - 如何从 DirectoryEntry 和 DN 检索 DirectoryEntry

c# - 仅为我的国家注册用户

c# - 在 Visual Studio 中重命名某些内容时,如何查看 "unresolvable conflicts"是什么?

r - 为多个数据框和取消列表的列表计算新属性

string - 在字符串 Haskell 之间交换字符

c# - 为 Windows RT (windows 8.1/windows phone 8.1) 使用客户端证书

c# - 带有 OAuth2 的 ASP.NET Web API - 使用双因素身份验证时为 "Remember this browser"

html - 如何在可变宽度的父级(多行)中均匀地间隔元素?

java - 初始化一个 ArrayList