我应该为整数对使用什么数据结构?

时间:2015-07-29 16:46:06

标签: c# arrays list data-structures key-value

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

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

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美元,依此类推。由于我将数百万个这些数组保存在内存中并用于计算,因此我希望尽量减少内存和性能影响。

为了澄清,我使用数据的方式是用于制图。一旦我将成本分配给年份,我就根据它们所属的对象系列来总结数组。然后我将它们显示在一个堆积的条形图中。

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

2 个答案:

答案 0 :(得分:3)

使用Dictionary<int, int>

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

它可能不会耗尽较少的内存,但你可以避免存储空条目,并且数据的含义更加明显。

答案 1 :(得分:1)

如果(1)你所做的只是求和,并且(2)不需要对任何给定值进行查找访问,而只是迭代它们,并且(3)你的值真的很稀疏,

然后像

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

结合

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

可以在不降低效率的情况下为您提供最小的内存占用。字典(哈希)会耗费内存;对于内存占用而言,数组是最经济的,如果您有一个默认值(0),可以假定为省略的年份。但这只有在你不需要进行查找时才有效,因为这个结构是O(n)练习。