我在我的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#完成初学者 完整代码的链接:
答案 0 :(得分: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);
}
代码将根据您的需要打印数据。如果你想要别的东西,请告诉我。
这是一个经过测试的代码,它可以运行。
答案 1 :(得分:1)
我最初认为我需要做的工作已经在Program.cs的main方法中完成了。至于为什么我仍然收到消息:printJobs is not implemented yet
,C#编译并运行代码的最后一个工作版本,如果它发现任何构建错误。由于我的代码有几个构建错误,因此在我进行任何更改之前它运行的是最新版本。此外,在我保存并再次运行项目之前,我需要重新启动模块(x-out)。
就实现PrintJobs而言,我需要创建一个嵌套的foreach循环。第一个foreach到达Dictionary
中的字符串,这些字符串位于列表someJobs
中,第二个foreach到达字符串pair
,该字符串存储在item
中。程序自动知道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");
}