【问题标题】:Need Suggestion on how to store large data from a chart需要关于如何存储图表中的大数据的建议
【发布时间】:2014-12-26 15:19:27
【问题描述】:

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

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

此图表共有 73 行和 73 列。

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

【问题讨论】:

  • 二维数组。

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


【解决方案1】:

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

char elementValues[73][73];

原因:

  1. 二维数组值具有引用局部性的优势,这意味着它们存储在内存中的值彼此相当接近。这意味着您的访问速度会快得多,因为计算机不必做那么多工作。

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

  3. 字典对哈希值、键值等进行了额外的处理,这些是该特定功能不需要的。

【讨论】:

    【解决方案2】:

    保持原样

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

    这样你就不需要处理索引,而是可以通过使用元素名称来获取结果:

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

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

    【讨论】:

      【解决方案3】:

      据我所知,您计划根据键存储值,键本身是两个值的组合。在我看来

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

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

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

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

      但是,如果您想通过多个键索引相同的数据,那么我建议您使用 Boost.MultiIndex。

      unordered_map 是根据哈希表在内部实现的。因此,就插入和查找而言,您将获得良好的性能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-27
        • 1970-01-01
        • 1970-01-01
        • 2015-07-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多