我正在搜索这样的数据结构:
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[] Get(string tag) // data.Get("position")
double Get(string tag, int index) // data.Get("position", 17)
...
到目前为止,只需使用Dictionary<string, double[]>
或Dictionary<string, List<double>>
即可轻松实现。
现在这必须是线程安全的,它应该具有良好的性能。但简单的数据访问比性能更重要。
请注意,double[] Get(...)
会返回内部数据的副本,因为返回引用会导致多线程方案出现问题。通常会有一位作家和1-3位读者。
我尝试了一些内容,例如Dictionary<string, double[]>
和double[]
与List<double>
。
最好的方法是什么?是否有使用C#2.0的其他数据容器/结构?
编辑:
此类应充当由一个写入器线程填充的数据容器,该线程从硬件读取所有数据。在应用程序运行时,UI线程只是为了绘制图表而读取该数据。
第二个场景是以前的编写器线程,但是UI线程被一个线程替换,该线程对该数据执行计算并将结果存储在第二个数据实例中,然后由UI显示。
答案 0 :(得分: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 =行数。