繁体   English   中英

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

[英]What data structure should I use for integer pairs?

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

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

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

其中integer [0] = 0表示在2015年的成本为$ 0,integer [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)练习。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM