C# 用c语言将文件文本解析为字典#

C# 用c语言将文件文本解析为字典#,c#,csv,dictionary,text,nested,C#,Csv,Dictionary,Text,Nested,我有一个包含以下内容的文本文件: 0,ke-2,0.0986089045676918 0,putar,0.141656526869241 1,film,0.110677581313152 1,aveng,0.12035192077391 0,ke-2,0.0986089045676918 0,putar,0.141656526869241 1,胶片,0.110677581313152 1,aveng,0.12035192077391 我想用如下结构将文件txt解析为字典: private Di

我有一个包含以下内容的文本文件:

0,ke-2,0.0986089045676918 0,putar,0.141656526869241 1,film,0.110677581313152 1,aveng,0.12035192077391 0,ke-2,0.0986089045676918 0,putar,0.141656526869241 1,胶片,0.110677581313152 1,aveng,0.12035192077391 我想用如下结构将文件txt解析为字典:

private Dictionary openNormalization()
{
var temp=新字典();
var file=file.ReadLines(“normalization.txt”).Cast();
foreach(文件中的字符串f)
{
var doc=新字典();
字符串fwd=“0”;
string[]entry=f.Split(',');
如果(条目[0]==fwd)
{
单据新增(分录[1],折算为双(分录[2]);
fwd=条目[0];
}
其他的
{
临时添加(内部解析(fwd),文档);
doc=新字典();
单据新增(分录[1],折算为双(分录[2]);
fwd=条目[0];
}
返回温度;
}


如何修复它?

您的代码可能会工作,但它只在只有两个键(0和1)的情况下工作。如果添加键
2
,一切都会中断

您可以将
LINQ
GroupBy

请参阅下面的代码

private Dictionary<int, Dictionary<string, double>> openNormalization()
{
    var lines = File.ReadLines("normalization.txt");

    return lines
        .Select(line => line.Split(','))
        .GroupBy(item => Convert.ToInt32(item[0]))
        .ToDictionary(groupValues => groupValues.Key, groupValues => groupValues.ToDictionary(item => item[1], item => Convert.ToDouble(item[2])));
}
private Dictionary openNormalization()
{
var lines=File.ReadLines(“normalization.txt”);
回程线
.Select(line=>line.Split(','))
.GroupBy(项=>Convert.ToInt32(项[0]))
.ToDictionary(groupValues=>groupValues.Key,groupValues=>groupValues.ToDictionary(item=>item[1],item=>Convert.ToDouble(item[2]));
}

您的代码可能会工作,但它只在只有两个键(0和1)的情况下工作。如果添加键
2
,一切都会中断

您可以将
LINQ
GroupBy

请参阅下面的代码

private Dictionary<int, Dictionary<string, double>> openNormalization()
{
    var lines = File.ReadLines("normalization.txt");

    return lines
        .Select(line => line.Split(','))
        .GroupBy(item => Convert.ToInt32(item[0]))
        .ToDictionary(groupValues => groupValues.Key, groupValues => groupValues.ToDictionary(item => item[1], item => Convert.ToDouble(item[2])));
}
private Dictionary openNormalization()
{
var lines=File.ReadLines(“normalization.txt”);
回程线
.Select(line=>line.Split(','))
.GroupBy(项=>Convert.ToInt32(项[0]))
.ToDictionary(groupValues=>groupValues.Key,groupValues=>groupValues.ToDictionary(item=>item[1],item=>Convert.ToDouble(item[2]));
}

引发异常时,
条目[2]的值是多少?
条目[2]是0.0986089045676918我想转换为double,因为我必须添加到字典。您的代码运行在默认情况下使用
而不是
作为小数分隔符的区域性中?如果使用
double d=double.Parse(条目[2],CultureInfo.InvariantCulture),会发生什么情况
?是否有效?我的代码正在运行。对于double value,引发异常时
条目[2]
的值是多少?条目[2]是0.0986089045676918我想转换为double,因为我必须添加到字典。您的代码运行在默认情况下使用
而不是
作为小数分隔符的区域性中?如果使用
double d=double.Parse(条目[2],CultureInfo.InvariantCulture),会发生什么情况
?这行吗?我的代码在上运行。对于双值,但对于键,我有0到80个if子句。对于80个键,您需要80个if子句。但是对于键,我有0到80个if子句。对于80个键,您需要80个if子句