如何在 C# 中从字典创建 .csv 文件<List, List<string>>

问题描述 投票:0回答:2
我有一个 Dictionary(List, List(string)) (抱歉,由于某种原因,该编辑器不允许我输入 <>) 如下所示:

Key: A --> Value:{1,2,3} Key: B --> Value:{a,b,c} Key: C --> Value:{Hi,Hello,Hola}

我想创建一个 .csv 文件,其中的标题对应于我的字典键,“列”对应于列表。

因此,例如,我的 csv 文件中的第一列应该是: “A”列,值为 1 2 3 我的 csv 文件中的第二“列”应该是: 列“B”,值为 a b c 等。 (请注意,我希望保留列的顺序,但如果不保留也没关系)

或者换句话说,由于这将是一个逗号分隔的文件,因此第一“行”(标题)应该是:

A,B,C


    第二行:
    
1, a , Hi
    第三行:
    
2, b, Hello
    和第四行:
    
3, c, Hola


在 C# 中实现此目的的最佳方法是什么?我首先尝试对此进行研究,但我在网上看到的大多数建议似乎都没有使用 Dictionary(List, List(string)) 格式的字典。

我很感谢您的帮助。

c# dictionary export-to-csv
2个回答
1
投票
你可以试试这个:

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
    

0
投票
一种解决方案是将地图转换为列表列表。 外部列表对应于文件,内部列表对应于行。 一旦你有了输出就变得很容易。

在您的示例中,新的数据结构将是:

[[A,B,C] [1,a,Hi] [2,b,Hello] [3,c,Hola]]

地图和数据上的一组嵌套循环将允许您进行转换。

© www.soinside.com 2019 - 2024. All rights reserved.