On Wednesday, 14 May 2014 at 13:44:40 UTC, John Colvin wrote:

Yes, they are much faster. Normal array indexing is equivalent to *(myArray.ptr + index) plus an optional bounds check, whereas associative array indexing is a much, much larger job.

Why were you using associative arrays in the first place? Unless your keys are somehow sparse* or of a non-integer type there isn't any reason to.

It is very old code (dmd 2.052 times). When I set out to write it, I was a) new to the language and b) I could not yet tell whether or not I would need it (I think it also had to do with the way D was back then, but I don't remember my exact reasoning). It has always been in the back of my mind to change it into a normal array. It's basically a code corpse.


* How I see that constraint in that context:

(maxKey - minKey) / nElements > 1 + epsilon
where epsilon is the maximum proportional wasted space you could afford in a normal array (emptyElements / usedElements). Bear in mind the memory overhead of associative arrays is itself non-zero.

Also, while normal arrays tend to be more cache friendly than associative arrays, this isn't true for very sparse arrays.

Reply via email to