我正在读取一个csv文件并将其放置在以下结构中:
List<Dictionary<string, object>> l = new List<Dictionary<string, object>>();
CSV文件包含:
cod_curso; name
3; language
5; math
6; physic
我要做的代码是:
string path = "test.csv";
List<Dictionary<string, object>> l = new List<Dictionary<string, object>>();
using (var reader = new StreamReader(path))
{
var header = reader.ReadLine();
var keys = header.Split(";");
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(';');
for (int i = 0; i < values.Length; i++)
{
Dictionary<string, object> d = new Dictionary<string, object>();
d.Add(keys[i], values[i]);
l.Add(d);
}
}
}
要了解结构,请使用以下内容:
foreach (var item in l)
{
foreach (var dic in item)
{
Console.WriteLine(dic.Key + " " + dic.Value);
}
}
我想做的是通过键选择字典的值,但是这样做对我不起作用
var b = l.Select(a => a["cod_curso"]);
我得到空值。
“ cod_curso”是csv文件的一列,并且是字典中的键
下一张图片是我在调试中得到的
如何实现我想要的?还是为什么会这样?
答案 0 :(得分:2)
您希望在内部循环之外创建并添加每个字典,例如:
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(';');
var d = new Dictionary<string, object>(); // New dictionary for each line
for (int i = 0; i < values.Length; i++)
{
d.Add(keys[i], values[i]);
}
l.Add(d);
}