使用LinQ从csv中选择树
我有一个包含35K行的csv,其中包括以下内容:articleID、description、class1、class2、class3。 类collumns表示产品所属的类别。类别1是主类别,类别2是类别1的子类别,类别3是类别2的子类别。 现在我想提取树状结构中的类别,但我有点迷路了 我唯一能想到的就是使用下面的linq查询来获得一个不同的列表。一般来说,我不是linq或c/.Net方面的专家。。。 ParseStream函数返回一个行列表,其中包含一个collumn值数组。i[3]、[4]和[5]代表类别1、2和3使用LinQ从csv中选择树,linq,c#-3.0,csv,tree,Linq,C# 3.0,Csv,Tree,我有一个包含35K行的csv,其中包括以下内容:articleID、description、class1、class2、class3。 类collumns表示产品所属的类别。类别1是主类别,类别2是类别1的子类别,类别3是类别2的子类别。 现在我想提取树状结构中的类别,但我有点迷路了 我唯一能想到的就是使用下面的linq查询来获得一个不同的列表。一般来说,我不是linq或c/.Net方面的专家。。。 ParseStream函数返回一个行列表,其中包含一个collumn值数组。i[3]、[4]和[
List<string[]> infoList = ParseStream(infoFile);
List<string> categories = (from i in infoList
select new StringBuilder().Append(i[3]).Append(";").Append(i[4]).Append(";").Append(i[5]).ToString())
.Distinct().ToList();
这只是给我一个所有类别路径的单独列表。。。
我认为存储hiarchical列表的最佳数据类型是什么?如何使用linq选择此选项?这可以使用linq完成,但我找不到性能良好的方法 一种简单的方法是基于和: 结果是分层数据,其中第一级是class1,第二级是class2,最后一级是class3。默认情况下,字典键是不同的,哈希集值也是不同的,因此不会有重复的值 例如,要以分层缩进方式打印所有值,请执行以下操作:
var classes = new Dictionary<string, Dictionary<string, HashSet<string>>>();
foreach (var class1 in classes)
{
Console.WriteLine(class1.Key);
foreach (var class2 in class1.Value)
{
Console.WriteLine("\t{0}", class2.Key);
foreach (var class3 in class2.Value)
{
Console.WriteLine("\t\t{0}", class3);
}
}
}
这可以用LINQ完成,但我找不到性能好的方法 一种简单的方法是基于和: 结果是分层数据,其中第一级是class1,第二级是class2,最后一级是class3。默认情况下,字典键是不同的,哈希集值也是不同的,因此不会有重复的值 例如,要以分层缩进方式打印所有值,请执行以下操作:
var classes = new Dictionary<string, Dictionary<string, HashSet<string>>>();
foreach (var class1 in classes)
{
Console.WriteLine(class1.Key);
foreach (var class2 in class1.Value)
{
Console.WriteLine("\t{0}", class2.Key);
foreach (var class3 in class2.Value)
{
Console.WriteLine("\t\t{0}", class3);
}
}
}
很好,很有效的答案。Dictionary和HashSet是存储这些信息的好方法。但我想用linq在1个语句中选择它…很好的,有效的答案。Dictionary和HashSet是存储这些信息的好方法。但我想用linq…Retag在1个语句中选择它。没有C3.5,请参见Retag。没有C3.5,请参见