如何在 C# 中从 Dictionary<List, List<string>> 创建 .csv 文件
How to create a .csv file from a Dictionary<List, List<string>> in C#
我有一个
Dictionary(List, List(string))(抱歉,出于某种原因,这个编辑器不允许我输入 <>)
如下所示:
Key: A --> Value:{1,2,3}
Key: B --> Value:{a,b,c}
Key: C --> Value:{Hi,Hello,Hola}
我想创建一个 .csv 文件,其中 Headers 对应于我的字典键,'Columns' 对应于列表的键。
因此,例如,我的 csv 文件中的“第一列”应该是:
列 'A',值为 1 2 3
我的 csv 文件中的第二个 'column' 应该是:
列 'B',值为 a b c 等。
(请注意,我希望保留列的顺序,但如果不保留也没关系)
或者换句话说,因为这将是一个逗号分隔的文件,第一个 'Row' (Headers) 应该是:
A,B,C
第二行:
1, a , Hi
第三行:
2, b, Hello
和第四行:
3, c, Hola
在 C# 中实现此目的的最佳方法是什么?我首先尝试研究这个,但我似乎在网上看到的大多数建议似乎都没有使用格式为 Dictionary(List, List(string)).
的字典
感谢您的帮助。
一种解决方案是将您的地图转换为列表列表。
外部列表对应于文件,内部列表对应于行。
一旦你有了输出就变得容易了。
在您的示例中,新的数据结构将是:
[[A,B,C]
[1,a,Hi]
[2,b,Hello]
[3,c,Hola]]
地图和数据上的一组嵌套循环将允许您进行转换。
你可以试试这个:
static void Main(string[] args)
{
//Sample data declaration
Dictionary<string, List<string>> data = new Dictionary<string, List<string>>();
data.Add("Hello", new List<string>{"1", "2", "4"});
data.Add("Foo", new List<string> { "3", "4", "7" });
data.Add("World", new List<string> { "3", "4", "7" });
DicToExcel(data, @"D:\my.csv");
}
逻辑来了:
public static void DicToExcel(Dictionary<string, List<string>> dict, string path)
{
//We will put all results here in StringBuilder and just append everything
StringBuilder sb = new StringBuilder();
//The key will be our header
String csv = String.Join(",",
dict.Select(d => d.Key));
sb.Append(csv + Environment.NewLine);
//We will take every string by element position
String csv1 = String.Join(",",
dict.Select(d => string.Join(",", d.Value.First().Take(1))));
sb.Append(csv1 + Environment.NewLine);
String csv2 = String.Join(",",
dict.Select(d => string.Join(",", d.Value.Skip(1).Take(1))));
sb.Append(csv2+ Environment.NewLine);
String csv3 = String.Join(",",
dict.Select(d => string.Join(",", d.Value.Skip(2).Take(1))));
sb.Append(csv3);
//Write the file
System.IO.File.WriteAllText(path, sb.ToString());
}
结果将是:
Hello Foo World
1 3 3
2 4 4
4 7 7
我有一个 Dictionary(List, List(string))(抱歉,出于某种原因,这个编辑器不允许我输入 <>) 如下所示:
Key: A --> Value:{1,2,3}
Key: B --> Value:{a,b,c}
Key: C --> Value:{Hi,Hello,Hola}
我想创建一个 .csv 文件,其中 Headers 对应于我的字典键,'Columns' 对应于列表的键。
因此,例如,我的 csv 文件中的“第一列”应该是: 列 'A',值为 1 2 3 我的 csv 文件中的第二个 'column' 应该是: 列 'B',值为 a b c 等。 (请注意,我希望保留列的顺序,但如果不保留也没关系)
或者换句话说,因为这将是一个逗号分隔的文件,第一个 'Row' (Headers) 应该是:
A,B,C
第二行:
1, a , Hi
第三行:
2, b, Hello
和第四行:
3, c, Hola
在 C# 中实现此目的的最佳方法是什么?我首先尝试研究这个,但我似乎在网上看到的大多数建议似乎都没有使用格式为 Dictionary(List, List(string)).
的字典感谢您的帮助。
一种解决方案是将您的地图转换为列表列表。 外部列表对应于文件,内部列表对应于行。 一旦你有了输出就变得容易了。
在您的示例中,新的数据结构将是:
[[A,B,C]
[1,a,Hi]
[2,b,Hello]
[3,c,Hola]]
地图和数据上的一组嵌套循环将允许您进行转换。
你可以试试这个:
static void Main(string[] args)
{
//Sample data declaration
Dictionary<string, List<string>> data = new Dictionary<string, List<string>>();
data.Add("Hello", new List<string>{"1", "2", "4"});
data.Add("Foo", new List<string> { "3", "4", "7" });
data.Add("World", new List<string> { "3", "4", "7" });
DicToExcel(data, @"D:\my.csv");
}
逻辑来了:
public static void DicToExcel(Dictionary<string, List<string>> dict, string path)
{
//We will put all results here in StringBuilder and just append everything
StringBuilder sb = new StringBuilder();
//The key will be our header
String csv = String.Join(",",
dict.Select(d => d.Key));
sb.Append(csv + Environment.NewLine);
//We will take every string by element position
String csv1 = String.Join(",",
dict.Select(d => string.Join(",", d.Value.First().Take(1))));
sb.Append(csv1 + Environment.NewLine);
String csv2 = String.Join(",",
dict.Select(d => string.Join(",", d.Value.Skip(1).Take(1))));
sb.Append(csv2+ Environment.NewLine);
String csv3 = String.Join(",",
dict.Select(d => string.Join(",", d.Value.Skip(2).Take(1))));
sb.Append(csv3);
//Write the file
System.IO.File.WriteAllText(path, sb.ToString());
}
结果将是:
Hello Foo World
1 3 3
2 4 4
4 7 7