![](/img/trans.png)
[英]What C# data structure should I use to map a varying number of key/value pairs to a list of strings?
[英]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.