0

我的程序(控制台应用程序)基本上是读取一个非常大的 csv 文件并对其进行处理。我觉得文件中的某些列可以组合在一起并在课堂上得到最好的服务,例如第一行是标题,第二行以后是值。每列都有这种结构。所以我需要对标题、列的位置和值进行分组。最简单的是创建一个类

这是数据的样子:

title1, title2, title3, ...
1,1,2, ...
20,30,5000,...
.
.
.


class tt 
{
  string title;
  int column;
  List<int> val = new List<int>();

}

但问题是有大约 1,000 列,它们转换为 1,000 个对象。这是一个好方法吗?没有把握?

4

3 回答 3

0

一个有 1000 名成员的班级听起来……不寻常,直言不讳。由于代码不太可能按名称引用其中任何一个,我会说按值创建成员会弄巧成拙。但是对于“我应该创建一个类” - 好吧,你没有很多选择 - 它肯定会成为一个非常糟糕的结构。实际上,我怀疑这可能是一个公平的场景DataTable- 这不是我通常推荐的,但对于你描述的数据,它可能会做得很好。是的,它有开销——但它优化了许多问题——例如,通过将数据内部存储在类型化列中(而不是行,如您所料),它避免了在存储期间将所有值装箱(尽管它们在访问期间仍然倾向于装箱,但这些盒子是在 gen-0 期间收集的,因此很便宜)。

在大多数计算场景中,“千”是一个很小的数字。

注意:如果您实际上是指 1000 行,并且列实际上是正常的(例如,少于 50 行,都有意义),那么我会说“当然,创建一个映射数据的类” - 例如:

class Customer {
    public int Id {get;set;}
    public string Name {get;set;}
    //...
}

有几种工具可以帮助您将其从 SCV 读入对象,通常读入一个List<Customer>IEnumerable<Customer>.

于 2013-08-27T15:54:04.653 回答
0

但问题是有大约 1,000 列,它们转换为 1,000 个对象。这是一个好方法吗

的,翻译成 1000 个对象(如果你需要它们)不应该打扰你。

但是,对于这么多列来说,创建类是大量的工作。除非绝对必要,否则我不会这样做。您可以使用数据表。

于 2013-08-27T15:54:06.000 回答
0

如果您的文件是一个大的 CSV 文件,我建议将它们加载到数据集上。我看不到为每一列使用一个类有什么好处

CSV 看起来像一个转置的常规数据表,因此每一列实际上是一行

于 2013-08-27T15:58:58.397 回答