旋转输入数据 - 是否有我可以使用的结构

本文关键字:可以使 结构 有我 是否 输入 数据 旋转 | 更新日期: 2023-09-27 17:56:40

我有对象列表给出的输入数据:

Name: "Room A",
Time: "15:00",
Topic: "Some Topic"
Name: "Room A",
Time: "18:00",
Topic: "Some Other Topic"
Name: "Room B",
Time: "12:00",
Topic: "Some More Topic"
Name: "Room C",
Time: "13:00",
Topic: "Even More Topic"

我必须从中创建不同的表。首先,应该有一个表,其中行基于时间,cols 基于名称,但将来,当对象增长时,我希望能够围绕其他属性进行透视。

我想编写如下代码:

var structure = new SomeCSharpStructure(); // <------
for(int i=0;i<24) structure.AddRow(i+":00");
foreach(var name in inputData.Select(x=>x.Name).Distinct()) structure.AddColumn(name);
foreach(var data in inputData) {
    structure[data.Name][data.Time] = data.Topic; // or
    // structure.AddCell(data.Name,data.Time,data.Topic);
}
...
foreach(var row in structure.getRows()) foreach(var cell in row.getCell())
{
     PrintCellContent(cell);
}

尽管我也愿意接受其他建议。

但是现在我正在寻找一种结构,该结构可以支持这种实例化,而不会将NullPointerExceptionsIndexOutOfRangeExceptions洒到处。在我自己实现它之前,我想确保没有可用的。

有谁知道适合我需求的结构?

旋转输入数据 - 是否有我可以使用的结构

您可以使用

已经实现数据透视表计算的 NReco.PivotData 库(我是这个库的作者,可以免费使用),而不是编写对数据进行分组的自定义代码。它提供了数据透视表结构,用于根据行和列访问表值:

var pvtData = new PivotData(new[] {"Name", "Time"}, new CountAggregatorFactory() );
pvtData.ProcessData( inputData, new ObjectMember().GetValue );
var pvtTbl = new PivotTable(new[] {"Name"}, new[] {"Time"}, pvtData);
var columns = pvtTbl.ColumnKeys;
var rows = pvtTbl.RowKeys;
var cellValue = pvtTbl[0,0].Value; // get first cell value

一些解释:

  • PivotData 类生成内存中多维数据集(多维数据集)并执行数据聚合
  • 对象成员为维度值提供 POCO 模型属性访问器
  • 类提供可用于数据透视表呈现的表模型。它可用于获取总计和小计。