需要有关如何从图表存储大数据的建议

时间:2014-10-30 14:17:21

标签: java c# c++ arrays multidimensional-array

I have to get the values from this Chart which is in a XLS format file.

我正在实施混合热的公式,但我对如何处理这些数据感到困惑(如上图所示)。 我的程序将包括两个下拉列表,我必须从每个下拉列表中选择一个元素。下行列表中的一个将表示第一列的值,另一个下拉列表将表示第一行的值(如上图所示。系统必须从下拉列表中显示所选元素的值。

例如。 如果我想得到表中的碳(C)和氮(N)值-2。我不知道获取该特定值的最简单方法。我应该如何存储这些数据?即我应该使用多维数组,链接列表,字典,数据库等或任何其他方法。

此图表共有73行和73列。

该图表采用XLS格式。 (上图所示的图片只是该图表中的一小部分。)。

3 个答案:

答案 0 :(得分:1)

我会使用二维数组。在C ++中,因为你知道你想要多少行/列:

char elementValues[73][73];

原因:

  1. 2d数组值具有引用位置的好处,这意味着它们存储在内存中的值彼此非常接近。这意味着您的访问速度会快得多,因为计算机不需要做太多工作。

  2. 链接列表为O(n),而数组访问只能是O(1)。原因是每次要查找值时都需要遍历整个列表,而在数组中,您可以直接找到所需的值。

  3. 字典对此特定功能不需要的哈希值,键值等进行了额外处理

答案 1 :(得分:0)

将所有内容保持为

public Dictionary<string, Dictionary<string, double>> Data;

这样您就不需要处理索引,但可以使用元素名称来获得结果:

var value = Data["Mg"]["B"];

对于serialize dictionary,您可以将数据转换为二维数组,方法是对元素名称进行排序(在您的示例中,它们的排序方式不同,这可能不是最佳的,因为您不希望存储分子质量等,每个元素按那个排序。

答案 2 :(得分:0)

从我得到的是你计划在键的基础上存储值,键本身是两个值的组合。在我看来

unordered_map<std::pair<char,char>, value_type>

可以为您提供良好的插入和查找性能。

所以,如果你想要两个字符组成一个键,那就去

unordered_map<std::pair<char,char>, value_type>.

但是,如果你想用多个键索引相同的数据,那么我建议你选择Boost.MultiIndex。

unordered_map是在hash-table的内部实现的。所以,就插入和查找而言,你会获得良好的性能。