整数对应该用什么数据结构呢?

本文关键字:数据结构 什么 整数 | 更新日期: 2023-09-27 18:05:19

我正在尝试优化我的代码以加快计算速度并减少内存消耗。我需要存储年份和成本的数据。目前我使用固定数组来保存值。

例如,我有一个整数数组:

integer[0] = 0,  
integer[1] = 200,  
integer[2] = 0,  
integer[3] = 0,  
integer[4] = 200,  
integer[5] = 0,  
...   
integer[99] = 0

其中整数[0]= 0表示2015年的成本为0美元,整数[1]= 200表示2016年的成本为200美元,以此类推。由于我在内存中保存了数百万个这样的数组并用于计算,因此我希望将对内存和性能的影响降到最低。

澄清一下,我使用数据的方式是为了制作图表。一旦我为年份分配了成本,我就会根据它们所属的对象系列对数组求和。然后我将它们显示在堆叠条形图中。

有更好的方式来存储我的数据吗?我正在考虑键值列表,所以我只存储非零成本和年份,但我不知道这是否会有很大帮助。

整数对应该用什么数据结构呢?

使用Dictionary<int, int>:

var costs = new Dictionary<int, int> {
    { 2014, 150 },
    { 2016, 200 },
};

它不一定会占用更少的内存,但是您可以避免存储空条目,并且数据的含义更加明显。

如果(1)你所做的只是求和,(2)不需要查找任何给定的值,只是简单地遍历它们,(3)你的值是真正稀疏的,

然后是

integer[0] = 200,  
integer[1] = 200,  
...   

year[0] = 2016,
year[1] = 2019,
...

将为您提供最小的内存占用,而不会损失效率。字典(哈希)消耗内存;对于内存占用来说,数组是最经济的,如果您有一个可以假定省略年份的默认值(0),则更是如此。但这只适用于不需要进行查找的情况,因为对于这种结构,查找是一个O(n)的操作。