Pre-expanding alloc cell(s) / reserving space for an associative array
IchorDev
zxinsworld at gmail.com
Mon Jul 10 09:30:57 UTC 2023
On Sunday, 9 July 2023 at 20:24:24 UTC, Cecil Ward wrote:
> Before I posted a question about avoiding unnecessary
> allocs/reallocs when adding entries to an array like so
> uint[ dstring ] arr;
>
> when I build it up from nothing with successive insertions.
>
> The array is accessed by a key that is a dstring. I was told
> that I can’t use .reserve or the like on it? Is that correct?
> My memory fails me, powerful pain drugs.
>
> Is there an alternate method I could use ? To be honest, the
> number of entries is likely to be extremely modest, so this is
> not a huge performance issue, six entries would be considered
> quite a lot. The string keys are probably not very very long.
> But I’m learning good habits for the day when I might have a
> bigger such database.
From the spec it sounds as though (but good luck testing for
sure) that if you have (for example) 6 big dummy key-value pairs
in the AA to begin with, then if you use `.clear` it "Removes all
remaining keys and values from [the] associative array. The array
is not rehashed after removal, __to allow for the existing
storage to be reused.__"
([source](https://dlang.org/spec/hash-map.html#properties)) I'm
not 100% sure this would work how you want, and it's such a hack,
but it's something.
D has a few user-made hash-map libraries, so it might be worth
investigating those to see if they offer a pre-allocation method,
too.
More information about the Digitalmars-d-learn
mailing list