0

我正在寻找这样的数据结构:

position      whoCares    bla           ...
200.001890     -0.00110    -0.100000
199.997990     0.000790    -2.200000
199.952110     0.026330    -28.900000
199.780060     0.116370    -60.400000
199.321650     0.349330    -154.200000
198.242900     0.901430    -248.700000
196.447890     1.816030    -289.200000
...            ...         ...

通过添加标签或向列添加新数据,表格可以在两个维度上增长。数据大小从 3-20 列到每列 100-10000 个 double 不等。

这应该定义为一个数据集作为一个类实例。数据访问应如下所示:

double[] Get(string tag)             // data.Get("position")
double Get(string tag, int index)    // data.Get("position", 17)
...

到目前为止,这很容易,只需使用 aDictionary<string, double[]>Dictionary<string, List<double>>

现在这必须是线程安全的,并且应该具有良好的性能。但简单的数据访问比性能更重要。

请注意,double[] Get(...)返回内部数据的副本,因为返回引用会在多线程场景中造成麻烦。通常会有一名作者和 1-3 名读者。

我尝试了几种方法,例如Dictionary<string, double[]>and double[]vs. List<double>

最好的方法是什么?是否有其他使用 C# 2.0 的数据容器/结构?


编辑:

此类应充当由一个写入器线程填充的数据容器,该写入器线程从硬件读取所有数据。在应用程序运行时,UI 线程读取该数据只是为了绘制图表。

第二种情况是之前的编写器线程,但是 UI 线程被一个线程取代,该线程对该数据执行计算并将结果存储在第二个数据实例中,然后由 UI 显示。

4

1 回答 1

1

另一种方法是使用多维数组。这在性能上可能会更好。

object[] table = new object[2];
table[0] = new string[x]; // Tags
table[0][0] = "tag";  // Example for a tag, you may iterate it

object[] doubles = new object[x];
doubles[0] = new double[y]; // Example for a column, you may iterate it

table[3] = doubles; // Doubles table

通过这种方式,您将在另一个数组中拥有两个数组。

注意 x = 列数和 y = 行数。

于 2012-06-21T06:24:12.680 回答