【问题标题】:Concatenating lists horizontally C#水平连接列表 C#
【发布时间】:2020-04-30 18:07:43
【问题描述】:

我正在使用 CsvHelper 库工具来帮助将我创建的列表写入 CSV 文件。

using (var sr = new StreamReader(inPath))
{
    using (var sw = new StreamWriter(outPath))
    {
        var reader = new CsvReader(sr);
        var writer = new CsvWriter(sw);

        IEnumerable records = reader.GetRecords<DataRecord>().ToList();

        List<CountAndFrequencyClass> list1 = new List<CountAndFrequencyClass>();
        list1 = CountAndFrequency(records, "ShipperName", 1);

        List<CountAndFrequencyClass> list2 = new List<CountAndFrequencyClass>();
        list2 = CountAndFrequency(records, "ShipperCity", 1);

        list1 = list1.Concat(list2).ToList();

        writer.WriteRecords(list2);
    }
}

list1=list1.Concat(list2).ToList();确实将字符串连接起来,但是当它们被写入 CSV 文件时,它会将它们堆叠在一起。我想找到一种方法来水平连接列表(因此它们彼此相邻显示)而不是垂直连接。

感谢您的帮助,如果需要更多信息,请告诉我!

【问题讨论】:

  • 我不知道你是否关心效率,但似乎一个接一个地循环遍历CSV的行,而不是选择一个列,遍历所有行、选择另一列、遍历所有行等。
  • 你的意思是说append 一个list2list1 然后将其作为单个记录写入csv文件
  • 您可以使用Zip 合并列表,但是您将如何存储结果列表?您需要一个能够并排保存两个列表中的数据的类,即具有两倍于 CountAndFrequencyClass 的属性。
  • @PrasadTelkikar,我尝试使用 list1.AddRange(list2);已经附加了列表,但这会导致同样的问题。这两个列表是垂直显示的,而不是水平显示的。
  • @JohnWu 这似乎很有希望。我将与 ExpandoObject 结合使用。非常感谢!

标签: c# list csv concatenation csvhelper


【解决方案1】:

您可以使用循环将 list2 列添加到 list1 的记录中

foreach (var i=0 ; i< list1.Count; i++)
{
    if(i>=list2.Count ) break;
    var rec1 = list1[i];
    var rec2 = list2[i];
    rec1.NewColumn = rec2.ColumnToAdd;
}

【讨论】:

    【解决方案2】:

    您可以在遍历列表时将它们写入文件。

    using (var sr = new StreamReader(inPath))
    {
        using (var sw = new StreamWriter(outPath))
        {
            var reader = new CsvReader(sr);
            var writer = new CsvWriter(sw);
    
            IEnumerable records = reader.GetRecords<DataRecord>().ToList();
    
            List<CountAndFrequencyClass> list1 = new List<CountAndFrequencyClass>();
            list1 = CountAndFrequency(records, "ShipperName", 1);
    
            List<CountAndFrequencyClass> list2 = new List<CountAndFrequencyClass>();
            list2 = CountAndFrequency(records, "ShipperCity", 1);
    
            for (int i = 0; i < list1.Count; i++)
            {
                writer.WriteRecord(list1[i]);
                writer.WriteRecord(list2[i]);
                writer.NextRecord();
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-16
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      • 2020-11-04
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多