【问题标题】:Iterate Over List of Jobs to Print Position, Name, Employer, Position, and Core Competency遍历作业列表以打印职位、姓名、雇主、职位和核心能力
【发布时间】:2017-07-25 20:05:02
【问题描述】:

我的Program.cs 文件中有一个我正在尝试实现的方法。当该方法遍历作业列表(其中每个作业都是字典)时,它应该打印:

*****
name: Data Scientist / Business Intelligence
employer: Bull Moose Industries
location: Saint Louis
position type: Sr. IT Analyst (Data/BI)    
core competency: Statistical Analysis
***** 

文件job_data.csv 包含我需要的所有工作信息:

name,employer,location,position type,core competency
Junior Data Analyst,Lockerdome,Saint Louis,Data Scientist / Business Intelligence,Statistical Analysis
Project Coordinator Support,Maritz,Saint Louis,Technical Assistant / User Support,Non-coding
Junior Web Developer,Cozy,Portland,Web - Front End,Ruby
Junior Developer 3,LiveAnswer,South Florida,Web - Full Stack,Java
Full Stack Engineer,Splitwise,Rhode Island,Web - Full Stack,Ruby
Customer Experience,Splitwise,Rhode Island,Project Manager / Analyst,Non-coding
IT Support Specialist,Viamontech,South Florida,Technical Assistant / User Support,Non-coding
C#/.net Developer ,Hunter Engineering,Saint Louis,Software / Enterprise Developer,.Net
Junior Developer,"TruckMovers.com, Inc.",Kansas City,Web - Full Stack,Python

...等等(总共有 99 行)。我需要做的是编写PrintJobs 方法,以便它到达job_data.csv 并打印出标签:

name: 
employer:
location:
position type:
core competency: 

之后是每行中它们对应的项目。例如,打印第 10 行将如下所示:

*****
name: Junior Developer
employer: "TruckMovers.com, Inc."
location: Kansas City
positon type: Web - Full Stack
core competency: Python
*****

我该怎么做?该方法的起始代码是:

private static void PrintJobs(List<Dictionary<string, string>> someJobs)
{
        Console.WriteLine("printJobs is not implemented yet");
}

我不完全确定参数someJobs 的来源。这也是我得到的提示:

为此,您需要遍历作业列表。每个工作本身就是一个字典。虽然您可以使用已知键(“雇主”、“位置”等)从字典中获取每个项目,但请考虑创建一个嵌套循环来循环遍历每个字典。您需要使用 Dictionary.Keys 属性来执行此操作。如果将新字段添加到作业记录中,则此方法将打印出新字段,而不对 PrintJobs 进行任何更新。

根据提示,我猜我需要执行以下操作:

private static void PrintJobs(List<Dictionary<string, string>> someJobs)
    {

    //match up index value with label, write label + value 

    if (i = [0])
        {Console.WriteLine("name: "); + string someJobs}

    else if (i = [1])
        {Console.WriteLine("employer: "); + string someJobs}

    else if (i = [2])
        {Console.WriteLine("location: "); + string someJobs}

    else if (i = [3])
        {Console.WriteLine("positon type: "); + string someJobs}

    else if (i = [4])
        {Console.WriteLine("core competencey: "); + string someJobs}

    }

我试过了,但仍然收到消息:

printJobs is not implemented yet        

完全是 C# 初学者。
完整代码链接:

Program.cs, JobData.cs, job_data.csv

【问题讨论】:

    标签: c# csv dictionary


    【解决方案1】:

    我最初认为我需要做的工作已经在 Program.cs 的 main 方法中为我完成了。至于为什么我仍然收到消息:printJobs is not implemented yet,如果发现任何构建错误,C# 将编译并运行代码的最后一个工作版本。由于我的代码有几个构建错误,因此在我进行任何更改之前它正在运行最新版本。在我保存并再次运行我的项目之前,我还需要重新启动模块(x - out)。

    就实现 PrintJobs 而言,我需要创建一个嵌套的 foreach 循环。第一个 foreach 到达 Dictionary 中的字符串,它们在列表 someJobs 中,第二个 foreach 到达存储在 item 中的字符串 pair。程序自动知道someJobs 是一个列表,因为它是在它之前声明的。

    private static void PrintJobs(List<Dictionary<string, string>> someJobs)
        {
            foreach(Dictionary<string,string> item in someJobs)
            {
                foreach (KeyValuePair<string, string> pair in item) {
                    Console.WriteLine(string.Format("{0} {1}", pair.Key, pair.Value));
                }
            }
    
            //Console.WriteLine("printJobs is not implemented yet");
        }
    

    【讨论】:

      【解决方案2】:

      我没有看到你的完整代码,但据我了解你的问题,你想打印你在下一部分中提到的 csv 数据

      *****
      name: Junior Developer
      employer: "TruckMovers.com, Inc."
      location: Kansas City
      positon type: Web - Full Stack
      core competency: Python
      *****
      

      您可以通过使用LINQ 来实现此目的,只需执行以下操作即可:

        var result = File.ReadAllLines(csvPath)
                     .Skip(1)//skipping first line because they are headers
                     .Select(x => x.Split(','))
                     .Select(x => new
                     {
                         Name = x[0],
                         employer = x[1],
                         location = x[2],
                         position_type = x[3],
                         core_competency = x[4]
                     });
              foreach (var item in result)
              {
                  Console.WriteLine("Name: " + item.Name+"\n");
                  //...
                  Console.WriteLine("Position Type: " + item.position_type);
              }
      

      代码将根据需要打印数据。如果您还想要别的东西,请告诉我。

      这是一个经过测试的代码,它可以工作。

      【讨论】:

      • 不,你所做的已经在 J​​obData.cs 中为我完成了。我需要做的就是创建一个嵌套循环,循环遍历字典并打印出结果。这是我不知道该怎么做。我猜它会是这样的: for (int item in Dictionary.Keys) { Console.WriteLine("columnChoice" + "columnItem");
      • 顺便说一句,它需要是一个嵌套的for循环,所以像: for (Dictionary in someJobs) { for (i in someJobs) { Console.WriteLine(ColumnChoice + string value);我需要定义字典的名称和类型
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多